程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> 多線程 同步 信號量-如果synchronized(new Object){} 和 Object obj = new Object(); synchronized(obj){}的區別是什麼?

多線程 同步 信號量-如果synchronized(new Object){} 和 Object obj = new Object(); synchronized(obj){}的區別是什麼?

編輯:編程解疑
如果synchronized(new Object){} 和 Object obj = new Object(); synchronized(obj){}的區別是什麼?

如果synchronized(new Object){} 和 Object obj = new Object(); synchronized(obj){}的區別是什麼? 主要是在synchronized()中放new Object 是四個線程一起,而放obj對象是一個一個的執行,這是什麼原因呢?

代碼:
class XianChengDemo {

public static void main(String[] args)

{

Card c = new Card();

Thread t = new Thread(c);

Thread t1 = new Thread(c);

Thread t2 = new Thread(c);

Thread t3 = new Thread(c);

t.start();

t1.start();

t2.start();

t3.start();
}}

class Card implements Runnable{
private static int cards = 100;
Object obj = new Object();

public void run()

{ while(true)
{ synchronized(obj)
{ if(cards>0)
{ try{Thread.sleep(10);}catch(Exception e){} System.out.println(Thread.currentThread().getName()+"------"+cards--);
}
else{
break;

}
}
} }}

最佳回答:


  第一種寫法使用的鎖監視器對象是臨時創建的,即每個線程運行到這段代碼時都會新建一個對象並以此為同步鎖,鎖不同當然不存在鎖競爭而等待問題,所以看到的是並行的。
 第二個寫法同步塊對象是全局的成員變量,所有訪問這段代碼的線程使用的是同一個鎖監視器,所以有競爭等待。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved