测试一:方法前未加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每次都是当前线程完成后立即更新的值,但多线程具有竞争性,此代码不能保证是哪一个线程该优先执行,所以线程执行是乱序的。