首页 > 代码库 > JAVA多线程---wait() & join()
JAVA多线程---wait() & join()
题外话:
interrupt()方法 并不能中断一个正常运行的线程!!!
class myThread extends Thread{ @Override public void run(){ for (int i = 0; i < 1000; i++) { System.out.println(i); } } } public class waitTest { public static void main(String[] args) throws Exception{ Thread t =new myThread(); t.start(); t.interrupt(); System.out.println("mark"); } }
输出:
mark
......
i=999
join()方法
具体用法http://www.cnblogs.com/luyu1993/p/7017927.html
这里看下它的源码
public final synchronized void join(long millis) throws InterruptedException { long base = System.currentTimeMillis(); long now = 0; if (millis < 0) { throw new IllegalArgumentException("timeout value is negative"); } if (millis == 0) { while (isAlive()) { wait(0); } } else { while (isAlive()) { long delay = millis - now; if (delay <= 0) { break; } wait(delay); now = System.currentTimeMillis() - base; } } }
join()内部调用的是wait() 注意 在调用wait()之前,线程必须获得该对象的锁,因此只能在同步方法/同步代码块中调用wait()方法。可以看见join()方法是synchronized的 所以没问题
看下面这段代码
1 class myThread extends Thread{ 2 @Override 3 public void run(){ 4 for (int i = 0; i < 1000; i++) { 5 System.out.println(i); 6 } 7 } 8 } 9 public class waitTest { 10 11 public static void main(String[] args) throws Exception{ 12 Thread t =new myThread(); 13 t.start(); 14 Thread.currentThread().wait(); 15 System.out.println("mark"); 16 } 17 18 }
此时程序会报错 不在同步方法/同步代码块 中调用wait()方法的错误!!!
JAVA多线程---wait() & join()
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。