日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java中什么是同步_Java中,“synchronized”(同步)是什么意思?什么时候应该用synchronized? - Break易站...

發布時間:2023/12/4 java 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中什么是同步_Java中,“synchronized”(同步)是什么意思?什么时候应该用synchronized? - Break易站... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

synchronized關鍵字的意義是什么?

什么時候應該是方法synchronized?

這是什么編程和邏輯?

Java中,“synchronized”(同步)是什么意思?什么時候應該用synchronized?

該synchronized關鍵字是所有不同的線程讀取和寫入相同的變量,對象和資源。這在Java中并不是一個簡單的話題,但是這里是Sun的一句話:

synchronized?方法為防止線程干擾和內存一致性錯誤提供了一個簡單的策略:如果一個對象對多個線程可見,則通過同步方法完成對該對象變量的所有讀取或寫入操作。

簡而言之,當你有兩個線程正在讀寫相同的'資源'時,比如說一個名為變量的變量foo,你需要確保這些線程以同步的方式訪問變量。如果沒有synchronized關鍵字,線程1可能看不到更改線程2?foo,或者更糟糕的是,它可能只有一半被更改。這不會是你所期望的。

“synchronized”(同步)的實例

public class SOP {

public static void print(String s) {

System.out.println(s+"\n");

}

}

public class TestThread extends Thread {

String name;

TheDemo theDemo;

public TestThread(String name,TheDemo theDemo) {

this.theDemo = theDemo;

this.name = name;

start();

}

@Override

public void run() {

theDemo.test(name);

}

}

public class TheDemo {

public synchronized void test(String name) {

for(int i=0;i<10;i++) {

SOP.print(name + " :: "+i);

try{

Thread.sleep(500);

} catch (Exception e) {

SOP.print(e.getMessage());

}

}

}

public static void main(String[] args) {

TheDemo theDemo = new TheDemo();

new TestThread("THREAD 1",theDemo);

new TestThread("THREAD 2",theDemo);

new TestThread("THREAD 3",theDemo);

}

}

注意:synchronized只要前一個線程的執行沒有完成,就阻塞下一個線程對方法test()的調用。線程一次可以訪問這個方法。如果沒有synchronized全部線程可以同時訪問這個方法

當一個線程調用對象的同步方法'test'(這里的對象是'TheDemo'類的一個實例)時,它獲得該對象的鎖,任何新線程只要前一個線程不能調用同一對象的任何同步方法已獲得鎖的鎖不會釋放鎖。

當類的任何靜態同步方法被調用時,會發生類似的事情。線程獲取與類關聯的鎖(在這種情況下,任何線程都可以調用該類實例的任何非靜態同步方法,因為該對象級鎖仍然可用)。只要類級鎖不是由當前擁有該鎖的線程釋放的,任何其他線程都將無法調用該類的任何靜態同步方法。

輸出與同步

THREAD 1 :: 0

THREAD 1 :: 1

THREAD 1 :: 2

THREAD 1 :: 3

THREAD 1 :: 4

THREAD 1 :: 5

THREAD 1 :: 6

THREAD 1 :: 7

THREAD 1 :: 8

THREAD 1 :: 9

THREAD 3 :: 0

THREAD 3 :: 1

THREAD 3 :: 2

THREAD 3 :: 3

THREAD 3 :: 4

THREAD 3 :: 5

THREAD 3 :: 6

THREAD 3 :: 7

THREAD 3 :: 8

THREAD 3 :: 9

THREAD 2 :: 0

THREAD 2 :: 1

THREAD 2 :: 2

THREAD 2 :: 3

THREAD 2 :: 4

THREAD 2 :: 5

THREAD 2 :: 6

THREAD 2 :: 7

THREAD 2 :: 8

THREAD 2 :: 9

輸出沒有同步

THREAD 1 :: 0

THREAD 2 :: 0

THREAD 3 :: 0

THREAD 1 :: 1

THREAD 2 :: 1

THREAD 3 :: 1

THREAD 1 :: 2

THREAD 2 :: 2

THREAD 3 :: 2

THREAD 1 :: 3

THREAD 2 :: 3

THREAD 3 :: 3

THREAD 1 :: 4

THREAD 2 :: 4

THREAD 3 :: 4

THREAD 1 :: 5

THREAD 2 :: 5

THREAD 3 :: 5

THREAD 1 :: 6

THREAD 2 :: 6

THREAD 3 :: 6

THREAD 1 :: 7

THREAD 2 :: 7

THREAD 3 :: 7

THREAD 1 :: 8

THREAD 2 :: 8

THREAD 3 :: 8

THREAD 1 :: 9

THREAD 2 :: 9

THREAD 3 :: 9

總結

以上是生活随笔為你收集整理的java中什么是同步_Java中,“synchronized”(同步)是什么意思?什么时候应该用synchronized? - Break易站...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。