synchronized(this)用法
关于 Java synchronized(this) 的问题
用法:
public class Thread1 implements Runnable {public void run() {
synchronized(this) { for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName()+ " synchronized loop " + i); }} }
public static void main(String[] args) {
Thread1 t1 = new Thread1();Thread ta = new Thread(t1,"A");Thread tb = new Thread(t1,"B");ta.start();tb.start(); }
}
分析:
synchronized(this)
这里的this是指当前对象,也就是说不管ta还是tb,刚开始运行这段代码的时候会给这段代码加个锁,这样即使运行到中间被替换了,另一个线程也不会执行这段代码,因为这段代码加锁了,而钥匙在给代码加锁的那个线程手里,只有加锁的线程运行完这段代码,才会给代码解锁.然后其他线程才能执行这段代码..
加个synchronized(this)以后运行结果是这样:
A synchronized loop 0
A synchronized loop 1
A synchronized loop 2
A synchronized loop 3
A synchronized loop 4
B synchronized loop 0
B synchronized loop 1
B synchronized loop 2
B synchronized loop 3
B synchronized loop 4
不加的话是这样:(顺序乱了,有好多种结果,这里只是其中一种)..
A synchronized loop 0
B synchronized loop 0
A synchronized loop 1
B synchronized loop 1
A synchronized loop 2
B synchronized loop 2
A synchronized loop 3
B synchronized loop 3
B synchronized loop 4
A synchronized loop 4
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
