14 线程状态
package thread; public class TestOne { public static void main(String[] args) { // TODO Auto-generated method stub method(); } /** * 一个任务被称为一个线程,同时运行一个以上的任务被称为多线程。 * * 1.使线程休眠 sleep * * 2.启动线程start * 不要直接用Thread的start方法,创建一个线程池,不必为每个任务开启一个线程 * 不要直接调用 Thread方法和Runnable的run方法,只会执行同一线程中的任务,不会开启一个新线程。 * * 3.中断线程 * 没有方法可以强制线程中断, interrupt 可以请求线程中断,调用interrupt方法是线程的中断状态将被置位。 * * void interrupt() 向线程发送请求,将线程的中断状态置为true * * public boolean isInterrupted() {} 测试当前线程是否被中断。 会将当前线程的中断状态置为false * * public static native Thread currentThread(); 返回当前线程对象 * */ public static void method(){ // Thread.currentThread().isInterrupted(); Thread.currentThread().interrupt(); System.out.println(Thread.currentThread().isInterrupted()); } }
package thread; public class TestTwo { /** * 线程状态 * * 线程可以有6种状态: * New (新创建) * Runnable(可运行) * Blocked(被阻塞) * waiting(等待) * Timed waiting(计时等待) * Terminated(被终止) * * * 新创建线程 * new Thread(r) * * 可运行线程 * 可能正在运行,也可能没有运行 * 抢占式调度系统:给每个可运行线程一个时间片来执行任务,时间片用完,剥夺线程的运行权,给另外一个线程运行机会。 * * 被阻塞线程和等待线程 * 每个线程视图获取对象的内部锁,当锁被其他线程持有的时候,则该线程处于阻塞状态。 * 直到所有线程释放内部锁,线程调度器允许本线程持有它时,线程处于非阻塞状态。 * * 等待状态:当前线程等待另外一个线程通知调度器一个条件时,自身进入等待状态。 * 计时等待:有几个方法具有超时参数,调用它,导致线程进入计时等待。 * * 被终止的线程 * 有2个原因导致线程被终止: * 1)run方法正常退出而自然死亡 * 2)因为一个没有捕获的异常终止了run方法 * * join() 等待终止指定的线程 * * Thread.currentThread().getState() 获取当前线程的状态 */ public static void main(String[] args) { // TODO Auto-generated method stub try { System.out.println(Thread.currentThread().getState()); Thread.currentThread().join(); } catch (InterruptedException e) { e.printStackTrace(); } } }