线程中的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类:
实现Runnable接口建立线程:
- package com.boxun.hzw.test;
- /**
- * 直接继承Thread类
- * @author Administrator
- *
- */
- public class TestTTT extends Thread {
- public int count = 1 ,number ;
- public TestTTT(int num){
- number = num ;
- }
- /*
- * 必须覆盖Thread类的run方法
- * Thread类提供咱们的线程所要执行的代码、
- * 为了指定我本身的代码、只须要覆盖它
- * @see java.lang.Thread#run()
- */
- public void run(){
- while(true){
- System.out.println("线程:"+number+"---计数:"+count++);
- /*
- * 这里能够运行++count == 双数(偶数2/4/6/8)看看会出现死循环
- * 缘由——System.out.println()中count++了一次、本来是1变为二、下面++count在让2变为三、
- * 按照这个规律偶数永远不能被判断到、因此一直跑下去、
- */
- if(++count == 11) return ;
- }
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- /*
- * start()方法
- * 使该线程开始执行;
- * Java 虚拟机调用该线程的 run 方法。
- * 结果是两个线程并发地运行;当前线程(从调用返回给 start 方法)和另外一个线程(执行其 run 方法)。
- * 屡次启动一个线程是非法的。特别是当线程已经结束执行后,不能再从新启动。
- *
- */
- new TestTTT(1).start();
- }
- }
- package com.boxun.hzw.test;
- /**
- * Runnable接口:
- * 里面只有一个方法、run。
- *
- * @author Administrator
- *
- */
- public class ThreadTest implements Runnable {
- int count = 1 ,number ;
- public static void main(String[] args) {
- ThreadTest t = new ThreadTest();
- for (int i = 0; i < 5; i++) {
- t.number = i +1 ;
- new Thread(t).start();
- }
- }
- /*
- * 使用实现接口 Runnable 的对象建立一个线程时,启动该线程将致使在独立执行的线程中调用对象的 run 方法。
- * @see java.lang.Runnable#run()
- */
- public void run() {
- while (true) {
- System.out.println("线程:"+number +"计数:"+count++);
- if(count == 5){ count = 1 ; return ;}
- }
- }
- }