java 并發測試main方法_java并發編程test之synchronized測試

synchronized關鍵字可以用于聲明方法,也可以用于聲明代碼塊;

package com.test.java;

public class SyncTest {

public static void main(String[] args) {

SynchronizedDemo1 synct1 = new SynchronizedDemo1();

SynchronizedDemo2 synct = new SynchronizedDemo2();

SynchronizedDemo2 synct2 = new SynchronizedDemo2();

Thread t = new Thread(){

@Override

public void run() {

SynchronizedDemo1.foo1();

}

};

Thread t2 = new Thread(){

@Override

public void run() {

synct1.foo2();

}

};

t.start();

t2.start();

System.out.println("-------------");

}

}

/**

* 靜態方法修飾, 全局阻塞(調用方法則阻塞)

* 在不同線程中,這個兩個方法調用時互斥的

* @author 63176

*/

class SynchronizedDemo1{

public synchronized static void foo1(){

System.out.println("foo1被執行了");

try {

Thread.sleep(5000000l);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println("foo1未執行結束");

}

public synchronized static void foo2(){

System.out.println("foo2被執行了");

try {

Thread.sleep(5000000l);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println("foo2執行結束");

}

}

/**

* 同一對象方法調用阻塞測試

* 針對同一個對象的多線程方法調用互斥

* @author 63176

*

*/

class SynchronizedDemo2{

public synchronized void foo1(){

System.out.println("foo1被執行了");

try {

Thread.sleep(5000000l);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println("foo1未執行結束");

}

public synchronized void foo2(){

System.out.println("foo2被執行了");

try {

Thread.sleep(5000000l);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println("foo2執行結束");

}

}

/**

* 塊阻塞 -

*

* @author 63176

* synchronized this時,僅鎖定當前對象引用;

* synchronized 類時,鎖定類,與靜態方法是互斥的

*/

class SynchronizedDemo3{

public void foo1(){

synchronized (this) {

System.out.println("foo1被執行了");

try {

Thread.sleep(5000000l);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println("foo1未執行結束");

}

}

public void foo2(){

synchronized (SynchronizedDemo3.class) {

System.out.println("foo2被執行了");

try {

Thread.sleep(5000000l);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println("foo2執行結束");

}

}

}

當線程進入第一個方法時,方法處理中,則其余線程訪問對應其他方法時,需等待第一個完成;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/395757.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/395757.shtml
英文地址,請注明出處:http://en.pswp.cn/news/395757.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

業余愛好者linux_如何從業余愛好者變成專業開發人員

業余愛好者linuxby Ken Rogers肯羅杰斯(Ken Rogers) 如何從業余愛好者變成專業開發人員 (How to Go From Hobbyist to Professional Developer) A few years ago, I was bouncing back and forth between landscaping jobs and restaurant jobs. I had just left college, and…

RedHat Enterprise Linux 6 配置Xmanager ,實現圖形界面連接

我們經常見到的幾種最為常用的windows下遠程管理Linux服務器的方法,基本上都是利用SecureCRT,或者是PUTTY等客戶端工具通過ssh服務來實現Windows下管理Linux服務器的,這些客戶端工具幾乎不需要什么配置,使用簡單,但是它們都無法啟…

Mac下配置iterm2 支持rz sz命令

轉自:http://blog.csdn.net/citywolf4/article/details/49071679 1.安裝lrzsz,使用brew命令:brew install lrzsz如果找不到lrzsz,使用以下命令更新brew庫:brew update2.下載zmoden腳本在https://github.com/mmastrac/iterm2-zmode…

java中session對象登錄_JavaWeb中Session對象的學習筆記

一、Session簡單介紹在WEB開發中,服務器可以為每個用戶瀏覽器創建一個會話對象(session對象),注意:一個瀏覽器獨占一個session對象(默認情況下)。因此,在需要保存用戶數據時,服務器程序可以把用戶數據寫到用戶瀏覽器獨…

vux flexbox使用_Flexbox用大的,彩色的動畫gif進行解釋

vux flexbox使用Here are three links worth your time:這是三個值得您花費時間的鏈接: How Flexbox works — explained with big, colorful, animated gifs (5 minute read) Flexbox的工作原理-帶有大尺寸,彩色動畫gif動畫( 閱讀5分鐘 ) How to commi…

微信小程序 沒有找到 node_modules 目錄

在學習小程序云開發的時候,遇到一個問題,使用npm i --production 和npm i vant-weapp -S --production之后,在微信開發者工具中并沒有node_modules文件夾 但是在根目錄下生成了一個package-lock.json文件。也就是下載的依賴都已經裝好了&…

關于Unity中UI中的Image節點以及它的Image組件

一、圖片的Inspector面板屬性 Texture Type:一般是選擇sprite(2D and UI) Sprite Mode:一般是選擇Single Packing Tag:打包的標志值,最后打包的時候會把Tag相同的所有小圖打包成一個大圖。不像cocos打包圖集需要用到第三方軟件&am…

Knockoutjs官網翻譯系列(一)

最近馬上要開始一個新項目的研發,作為第一次mvvm應用的嘗試,我決定使用knockoutjs框架。作為學習的開始就從官網的Document翻譯開始吧,這樣會增加印象并加入自己的思考,說是翻譯也并不是純粹的翻譯,會加入自己對知識點的思考以及自…

無人機導航定位系統Java_無人機高精度室內定位導航的技術方案

原標題:無人機高精度室內定位導航的技術方案因為一些特殊的用途,比如室內表演,編隊室內飛行等,無人機不可避免會在室內飛行,無人機對室內定位精度的要求很高,室內空間本身就不會太大,若定位精度…

javascript控制臺_如何充分利用JavaScript控制臺

javascript控制臺by Darryl Pargeter達里爾帕格特(Darryl Pargeter) 如何充分利用JavaScript控制臺 (How to get the most out of the JavaScript console) One of the most basic debugging tools in JavaScript is console.log(). The console comes with several other use…

Django之靜態文件配置

靜態文件 了解靜態文件配置之前,我們需要知道靜態文件是什么? 靜態文件其實指的是像css,js,img等一些被模板需要的文件。 如何在Django中配置我們的靜態文件 1.建立static文件夾,將靜態文件放在該目錄下 2.在settings文件下配置如…

神奇的圖像處理算法

http://blog.chinaunix.net/uid-23065002-id-4392043.html http://blog.csdn.net/k_shmily/article/details/51138154 幾周前,我介紹了相似圖片搜索。 這是利用數學算法,進行高難度圖像處理的一個例子。事實上,圖像處理的數學算法&#xff0c…

JavaWeb項目前端規范(采用命名空間使js深度解耦合)

沒有規矩不成方圓,一個優秀的代碼架構不僅易于開發和維護,而且是一門管理與執行的藝術。 這幾年來經歷了很多項目,對代碼之間的強耦合及書寫不規范,維護性差等問題深惡痛絕。在這里,通過仔細分析后,結合自己…

java重要基礎知識點_java基礎知識點整理

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓java基礎知識點整理1.&和&&的區別?&:邏輯與(and),運算符兩邊的表達式均為true時,整個結果才為true。&&:短路與,如果第一個表達式為false時&#…

網易云音樂的算法有什么特點_當算法設計音樂廳時會發生什么?

網易云音樂的算法有什么特點Here are three links worth your time:這是三個值得您花費時間的鏈接: What happens when algorithms design a concert hall? (3 minute read) 當算法設計音樂廳時會發生什么? ( 閱讀3分鐘 ) How to land a top-notch tec…

開機發現超級管理員賬戶不見了

今天出現了一個怪現象,連接打印機的電腦上沒有超級管理員賬戶,只有一個剛建立的新賬戶,這是怎們回事來?噯,原來啊,安裝Windows XP時,如果又設置了一個管理員賬戶,那么系統內置沒有密…

vs自帶iis局域網調試

http://www.cnblogs.com/liluping860122/p/4685564.html轉載于:https://www.cnblogs.com/wcLT/p/5594252.html

java.util.set cannot be assigned from null_Java中有關Null的9件事

對于Java程序員來說,null是令人頭痛的東西。時常會受到空指針異常(NPE)的騷擾。連Java的發明者都承認這是他的一項巨大失誤。Java為什么要保留null呢?null出現有一段時間了,并且我認為Java發明者知道null與它解決的問題相比帶來了更多的麻煩&…

node.js事件驅動_了解Node.js事件驅動架構

node.js事件驅動by Samer Buna通過Samer Buna 了解Node.js事件驅動架構 (Understanding Node.js Event-Driven Architecture) Update: This article is now part of my book “Node.js Beyond The Basics”.更新:這篇文章現在是我的書《超越基礎的Node.js》的一部分…

如何基于 Notadd 構建 API (Laravel 寫 API)

如何基于 Notadd 構建 API Notadd 底層實現了 passport 機制,有統一的授權管理,主要支持兩種方式進行 API 授權,一個是 client,領一個是 passport,這個在其他文檔中有做詳細的說明。 這里主要說的是,如何基…