// 调用方法时也会产生"非线程安全"问题
// 解决非线程安全问题的方法是使用synchronized 关键字,
// 细化一下pringln()和i-- 可能出现的 一种异常情况
public class MyThread5 extends Thread{
private int i=5;
@Override
public void run() {
super.run();
System.out.println("i="+(i--)+" threadName"+this.currentThread().getName());
}
}
// println方法内部是synchronized同步的,但是i--操作确实进入println()之前发生的,所以会发生非线程安全的问题
// 这个案例是很简单的案例:特别适合新手真的超级基础。。。 甚至 一眼扫过去 就懂了
//就是告诉我们:不要看到synchronized就以为代码是安全的,在synchronized之前执行的代码也有可能是不安全的.
class Run{
public static void main(String[] args) {
MyThread5 t1=new MyThread5();
MyThread5 t2=new MyThread5();
MyThread5 t3=new MyThread5();
MyThread5 t4=new MyThread5();
MyThread5 t5=new MyThread5();
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
}
}
java多线程25-27(调用方法时也会产生“非线程安全“问题)
最新推荐文章于 2024-04-27 09:13:51 发布