多线程日记(17.5.4)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程日记(17.5.4)相关的知识,希望对你有一定的参考价值。
1.线程的等待与唤醒wait()和notify();
public class Test{ public static void main(String[]args){ Thread thread1=new NewThread("t1"); synchronized(thread1){ System.out.println(Thread.currentThread().getName()+" is running"); thread1.start(); System.out.println(Thread.currentThread().getName()+" is running"); try{ thread1.wait(); System.out.println(Thread.currentThread().getName()+" is running"); }catch(InterruptedException e){ e.printStackTrace(); } } } } class NewThread extends Thread{ public NewThread(String name){ super(name); } public void run(){ synchronized(this){ System.out.println(Thread.currentThread().getName()+":"+"notify"); this.notify(); } } }
线程thread1是在main这个主线程上创建的,所以一开始运行的时主线程main,当thread1调用start方法,处于就绪状态,直到main被阻塞,cpu允许threadd1执行,会输出thread1:notify,直到thread1调用wait()方法被进行无线等待,最后main()进行运行。
如下程序:main运行→thread1调用start()方法运行→然后让thread1调用wait()方法进行等待→主线程main运行.
public class Test{ public static void main(String[]args){ Thread thread1=new NewThread("t1"); synchronized(thread1){ try{ System.out.println(Thread.currentThread().getName()+":"+"running"); //start thread1 thread1.start(); //thread1 wait thread1.wait(10000); System.out.println(Thread.currentThread().getName()+":"+"running"); }catch(InterruptedException e){ e.printStackTrace(); } } } } class NewThread extends Thread{ public NewThread(String name){ super(name); } public void run(){ synchronized(this){ System.out.println(Thread.currentThread().getName()+":"+"running"); } } }
以上是关于多线程日记(17.5.4)的主要内容,如果未能解决你的问题,请参考以下文章