synchronized浅析

来源:互联网 发布:starbound mac 汉化 编辑:程序博客网 时间:2024/06/06 15:44

我的理解synchronized就是将线程可能扰乱的程序块包裹起来,使synchronized块中的程序不至于被分开执行,而是作为一个元操作。

看段示例:

public class Synch implements Runnable {public static void main(String args[]) {Synch mt = new Synch();Thread t1 = new Thread(mt, "t1");Thread t2 = new Thread(mt, "t2");Thread t3 = new Thread(mt, "t3");Thread t4 = new Thread(mt, "t4");Thread t5 = new Thread(mt, "t5");Thread t6 = new Thread(mt, "t6");Thread t7 = new Thread(mt, "t7");Thread t8 = new Thread(mt, "t8");Thread t9 = new Thread(mt, "t9");Thread t0 = new Thread(mt, "t0");t1.start();t2.start();t3.start();t4.start();t5.start();t6.start();t7.start();t8.start();t9.start();t0.start();}public void run() {synchronized (this) {System.out.println("_____");System.out.println("F: " + Thread.currentThread().getName());System.out.println("A: " + Thread.currentThread().getName());}}}

 

运行结果(某次,不确定):

_____F: t1A: t1_____F: t3A: t3_____F: t5A: t5_____F: t2A: t2_____F: t7A: t7_____F: t4A: t4_____F: t6A: t6_____F: t8A: t8_____F: t9A: t9_____F: t0A: t0

 

虽然数字基本无序,但是F:A:输出有序

将synchronized段注释掉,再看输出结果:

_____F: t1A: t1_____F: t3_____F: t2A: t2A: t3_____F: t9A: t9_____F: t4A: t4_______________F: t6A: t6_____F: t7F: t8A: t8A: t7F: t5_____F: t0A: t0A: t5
输出可以说是乱七八糟,线程的运行顺序完全没法控制。