线程安全---在方法前加synchronized

测试一:方法前未加synchronized  线程不安全

package thread;



public class MyThread extends Thread {

private int count = 5;

public void run() {
count--;
System.out.println(this.currentThread().getName() + " count= " + count);
}

public static void main(String[] args) {

MyThread myThread = new MyThread();

Thread t1 = new Thread(myThread,"t1");
Thread t2 = new Thread(myThread,"t2");
Thread t3 = new Thread(myThread,"t3");
Thread t4 = new Thread(myThread,"t4");
Thread t5 = new Thread(myThread,"t5");

t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
}

}

打印结果(每次的结果都不一样):



测试二:方法前加synchronized 保证线程安全


分析:方法前加synchronized,保证线程安全性,使得每一个线程的操作都是原子性的,打印出的count每次都是当前线程完成后立即更新的值,但多线程具有竞争性,此代码不能保证是哪一个线程该优先执行,所以线程执行是乱序的。

猜你喜欢

转载自blog.csdn.net/qq_33378853/article/details/80836034