您的位置:首页 > 其它

关于多线程的一些新发现

2017-07-16 00:00 267 查看
平时写Java程序或者Java web 程序的时候,很少用到多线程,但是多线程却非常非常的重要,而我却没有机会,没有情景,也不到遇见什么业务逻辑去使用多线程,因此对多线程的理解一直停留在:

1、如何实现多线程?

2、调用star(),run()方法的区别?

3、怎么线程同步?

4、线程和进程区别?

等等基础的问题。

今天突然发现一个小细节,就是在线程通信的时候,使用 wait(),notify(),notifyAll()方法的时候,必须放在同步进程块中,如果不放入就会产生异常:java.lang.IllegalMonitorStateException

这是我第一次发现这个神奇的东西,曾经从来没有发现,或许是我没怎么用过吧。

测试代码1:

public class MyThread implements Runnable{

@Override
public void run(){
try {
this.wait();
System.out.println("11");
} catch (InterruptedException e) {
e.printStackTrace();
}
}

}

测试代码2:

public class MyThread2 implements Runnable{

@Override
public void run(){
this.notifyAll();
}

}

main方法:

public class Mytest extends Thread{
public static void main(String[] args) {
Runnable run1=new MyThread();
Runnable run2=new MyThread2();
Thread t1=new Thread(run1);
Thread t2=new Thread(run2);
t1.start();
try {
Thread.currentThread().sleep(5000);
} catch (InterruptedException e) {

e.printStackTrace();
}
t2.start();
}
}

-------------------控制台输出:--------------

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息