本文實(shí)例講述了Java互斥鎖。分享給大家供大家參考。具體分析如下:
互斥鎖,常常用于多個(gè)線程訪問(wèn)獨(dú)占式資源,比如多個(gè)線程同時(shí)寫(xiě)一個(gè)文件,雖然互斥訪問(wèn)方式不夠高效,但是對(duì)于一些應(yīng)用場(chǎng)景卻很有意義
//沒(méi)有互斥鎖的情況(可以自己跑跑看運(yùn)行結(jié)果):public class LockDemo { // private static Object lock = new Object();// static確保只有一把鎖 private int i = 0; public void increaseI() {// synchronized (lock) { for(int k=0;k<10;k++) { // 對(duì)i執(zhí)行10次增1操作 i++; } System.out.println(Thread.currentThread().getName() + "線程,i現(xiàn)在的值:" + i);// } } public static void main(String[] args) { LockDemo ld = new LockDemo(); int threadNum = 1000; // 選擇1000個(gè)線程讓結(jié)果更加容易觀測(cè)到 MyThread[] threads = new MyThread[threadNum]; for(int i=0;i<threads.length;i++) { threads[i] = new MyThread(ld); // 所有線程共用一個(gè)LockDemo對(duì)象 threads[i].start(); } }}class MyThread extends Thread { LockDemo ld; public MyThread(LockDemo ld) { this.ld = ld; } public void run() { ld.increaseI(); }}//加上互斥鎖以后:public class LockDemo { private static Object lock = new Object(); // static確保只有一把鎖 private int i = 0; public void increaseI() { synchronized (lock) { for(int k=0;k<10;k++) { // 對(duì)i執(zhí)行10次增1操作 i++; } System.out.println(Thread.currentThread().getName() + "線程,i現(xiàn)在的值:" + i); } } public static void main(String[] args) { LockDemo ld = new LockDemo(); int threadNum = 1000; // 選擇1000個(gè)線程讓結(jié)果更加容易觀測(cè)到 MyThread[] threads = new MyThread[threadNum]; for(int i=0;i<threads.length;i++) { threads[i] = new MyThread(ld); // 所有線程共用一個(gè)LockDemo對(duì)象 threads[i].start(); } }}class MyThread extends Thread { LockDemo ld; public MyThread(LockDemo ld) { this.ld = ld; } public void run() { ld.increaseI(); }}
希望本文所述對(duì)大家的java程序設(shè)計(jì)有所幫助。
新聞熱點(diǎn)
疑難解答
圖片精選