java Thread类 线程学习 一

线程中的7种很是重要的状态:(有的书上也认为只有前五种状态:而将"锁池"、"等待池" java

都当作是"阻塞"状态的特殊状况:这种认识也是正确的,可是将"锁池"和"等待池"单独分并发

离出来有利于对程序的理解)
一、初始状态、线程建立、线程对象调用start()方法。ide

二、可运行状态、也就是等待Cpu资源、等待运行的状态。spa

三、运行状态、得到了Cpu资源,正在运行状态。线程

四、阻塞状态、也就是让出Cpu资源、进入一种等待状态、而不是可运行状态、有三种对象

状况会进入阻塞状态。
     1)、如等待输入(输入设备进行处理、而Cpu不处理)、则放入阻塞、直到输入完毕、继承

阻塞结束后会进入可运行状态。
     2)、线程休眠、线程对象调用sleep()方法、阻塞结束后会进入可运行状态。
     3)、线程对象2调用线程对象1的join()方法、那么线程对象2进入阻塞状态、直到线接口

程对象1停止。队列

五、停止状态、也就是执行结束。资源

六、锁池状态。

七、等待队列。

线程的优先级:
    线程的优先级表明该线程的重要程度、当有多个线程同时处于可执行状态并等待得到

CPU时间时、线程调度系统根据各个线程的优先级来决定给谁分配CPU时间、优先级高

的线程有更大的机会得到CPU时间、优先级滴的线程也不是没有机会、只是机会要小一

些罢了。
     你能够调用Thread类的方法getPriority()和setPriorty来存取线程的优先级、线程的

优先级介于1(MIN_PRIORITY)和10(MAX_PRIORITY)之间、缺省是5

(NORM_PRIORITY)。

直接继承Thread类:

  
  
           
  
  
  1. package com.boxun.hzw.test;   
  2.    
  3. /**  
  4.  * 直接继承Thread类  
  5.  * @author Administrator  
  6.  *  
  7.  */   
  8. public class TestTTT extends Thread {   
  9.        
  10.     public int count = 1 ,number ;   
  11.        
  12.     public TestTTT(int num){   
  13.         number = num ;   
  14.     }   
  15.        
  16.     /*  
  17.      * 必须覆盖Thread类的run方法  
  18.      * Thread类提供咱们的线程所要执行的代码、  
  19.      * 为了指定我本身的代码、只须要覆盖它  
  20.      * @see java.lang.Thread#run()  
  21.      */   
  22.     public void run(){   
  23.         while(true){   
  24.             System.out.println("线程:"+number+"---计数:"+count++);   
  25.             /*  
  26.              * 这里能够运行++count == 双数(偶数2/4/6/8)看看会出现死循环  
  27.              * 缘由——System.out.println()中count++了一次、本来是1变为二、下面++count在让2变为三、  
  28.              * 按照这个规律偶数永远不能被判断到、因此一直跑下去、  
  29.              */   
  30.             if(++count == 11return ;   
  31.         }   
  32.     }   
  33.        
  34.     /**  
  35.      * @param args  
  36.      */   
  37.     public static void main(String[] args) {   
  38.             /*  
  39.              * start()方法  
  40.              * 使该线程开始执行;  
  41.              * Java 虚拟机调用该线程的 run 方法。  
  42.              * 结果是两个线程并发地运行;当前线程(从调用返回给 start 方法)和另外一个线程(执行其 run 方法)。   
  43.              * 屡次启动一个线程是非法的。特别是当线程已经结束执行后,不能再从新启动。  
  44.              *   
  45.              */   
  46.             new TestTTT(1).start();   
  47.     }   
  48. }  
实现Runnable接口建立线程:

  
  
           
  
  
  1. package com.boxun.hzw.test;   
  2.    
  3. /**  
  4.  * Runnable接口:  
  5.  * 里面只有一个方法、run。  
  6.  *   
  7.  * @author Administrator  
  8.  *  
  9.  */   
  10. public class ThreadTest implements Runnable {   
  11.     int count = 1 ,number ;   
  12.     public static void main(String[] args) {   
  13.         ThreadTest t = new ThreadTest();   
  14.         for (int i = 0; i < 5; i++) {   
  15.             t.number = i +1 ;   
  16.             new Thread(t).start();   
  17.         }   
  18.     }   
  19.    
  20.     /*  
  21.      * 使用实现接口 Runnable 的对象建立一个线程时,启动该线程将致使在独立执行的线程中调用对象的 run 方法。  
  22.      * @see java.lang.Runnable#run()  
  23.      */   
  24.     public void run() {   
  25.         while (true) {   
  26.             System.out.println("线程:"+number +"计数:"+count++);   
  27.             if(count == 5){ count = 1 ; return ;}   
  28.         }   
  29.     }   
  30.    
  31. }   
相关文章
相关标签/搜索