还不懂 Java 中的多线程?( 三 )

public static Thread.yield//暂停一段时间public static Thread.sleep //在一个线程中调用 other.join,将等待other执行完后才继续本线程 。public join//后两个函数皆可以被打断public interrupte
关于中断:它并不像 stop 方法那样会中断一个正在运行的线程 。线程会不时地检测中断标识位,以判断线程是否应该被中断(中断标识值是否为 true ) 。终端只会影响到 wait 状态、sleep 状态和 join 状态 。被打断的线程会抛出 InterruptedException 。
Thread.interrupted 检查当前线程是否发生中断,返回boolean
synchronized 在获锁的过程中是不能被中断的 。
中断是一个状态!interrupt方法只是将这个状态置为 true 而已 。所以说正常运行的程序不去检测状态,就不会终止,而 wait 等阻塞方法会去检查并抛出异常 。如果在正常运行的程序中添加while(!Thread.interrupted),则同样可以在中断后离开代码体
Thread类最佳实践:
写的时候最好要设置线程名称 Thread.name,并设置线程组 ThreadGroup,目的是方便管理 。在出现问题的时候,打印线程栈 (jstack -pid) 一眼就可以看出是哪个线程出的问题,这个线程是干什么的 。
如何获取线程中的异常

还不懂 Java 中的多线程?

文章插图
不能用try,catch来获取线程中的异常
Runnable
与 Thread 类似
Callable
future 模式:并发模式的一种,可以有两种形式,即无阻塞和阻塞,分别是 isDone 和 get 。其中 Future 对象用来存放该线程的返回值以及状态
  ExecutorService e = Executors.newFixedThreadPool(3);//submit 方法有多重参数版本,及支持 callable 也能够支持runnable 接口类型. Future future = e.submit(new myCallable);future.isDone //return true,false 无阻塞 future.get // return 返回值,阻塞直到该线程运行结束
九阴真经:高级多线程控制类
以上都属于内功心法,接下来是实际项目中常用到的工具了,Java1.5 提供了一个非常高效实用的多线程包: 


推荐阅读