欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解析Java線程同步鎖的選擇方法

 更新時間:2013年05月15日 15:30:56   作者:  
本篇文章是對Java線程同步鎖的選擇方法進行了詳細的分析介紹,需要的朋友參考下

在需要線程同步的時候如何選擇合適的線程鎖?
例:選擇可以存入到常量池當中的對象,String對象等  

復制代碼 代碼如下:

public class SyncTest
{
    private String name = "name";
public void method(String flag)
    {
        synchronized (name)
        {
            System.out.println(flag + ", invoke method ....");
            try
            {
                Thread.sleep(1000);
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args)
    {
        SyncTest test1 = new SyncTest();

        SyncTest test2 = new SyncTest();

        MyThread1 myThread1 = new MyThread1();
        MyThread1 myThread2 = new MyThread1();
        myThread1.syncTest = test1;
        myThread2.syncTest = test1;

        MyThread1 myThread3 = new MyThread1();
        MyThread1 myThread4 = new MyThread1();
        myThread3.syncTest = test2;
        myThread4.syncTest = test2;

        myThread1.start();
        myThread2.start();
        myThread3.start();
        myThread4.start();

    }

}


線程類:
復制代碼 代碼如下:

public class MyThread1 extends Thread
{
    SyncTest syncTest;

    @Override
    public void run()
    {
        syncTest.method(this.getName());
    }
}

本來應該是要實現線程thread1和thread2同步,線程thread3和thread4同步的,但結果呢?
卻是使得線程thread1、thread2、thread3、thread4同步了,很是郁悶。
我推薦選用的同步鎖對象:
復制代碼 代碼如下:

package com.rcx.thread;

public class SyncTest
{
    // 特殊的instance變量,用于充當同步鎖的對象
    private byte[] lock = new byte[0];

    public void method(String flag)
    {
        synchronized (lock)
        {
            System.out.println(flag + ", invoke method f....");
            try
            {
                Thread.sleep(1000);
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args)
    {
        SyncTest test1 = new SyncTest();

        SyncTest test2 = new SyncTest();

        MyThread1 myThread1 = new MyThread1();
        MyThread1 myThread2 = new MyThread1();
        myThread1.syncTest = test1;
        myThread2.syncTest = test1;

        MyThread1 myThread3 = new MyThread1();
        MyThread1 myThread4 = new MyThread1();
        myThread3.syncTest = test2;
        myThread4.syncTest = test2;

        myThread1.start();
        myThread2.start();
        myThread3.start();
        myThread4.start();

    }

}


推薦使用0長度的byte數組充當同步鎖對象,不會產生很詫異的錯誤同時不會占用很大內存。

相關文章

  • 淺談Java多線程處理中Future的妙用(附源碼)

    淺談Java多線程處理中Future的妙用(附源碼)

    這篇文章主要介紹了淺談Java多線程處理中Future的妙用(附源碼),還是比較不錯的,需要的朋友可以參考下。
    2017-10-10
  • java 隨機生成6位短信驗證碼實例代碼

    java 隨機生成6位短信驗證碼實例代碼

    這篇文章主要介紹了java 隨機生成6位短信驗證碼的實例代碼,文中給大家擴展介紹了java隨機生成四位數字驗證碼的方法,需要的朋友可以參考下
    2019-12-12
  • springboot的@Value中#和$區(qū)別詳解

    springboot的@Value中#和$區(qū)別詳解

    這篇文章主要介紹了springboot的@Value中#和$區(qū)別詳解,@Value注解的作用主要可以給屬性直接賦值、也可以讀取配置文件中的值給屬性賦值,需要的朋友可以參考下
    2023-11-11
  • java的SimpleDateFormat線程不安全的幾種解決方案

    java的SimpleDateFormat線程不安全的幾種解決方案

    但我們知道SimpleDateFormat是線程不安全的,處理時要特別小心,要加鎖或者不能定義為static,要在方法內new出對象,再進行格式化,本文就介紹了幾種方法,感興趣的可以了解一下
    2021-08-08
  • jsp+dao+bean+servlet(MVC模式)實現簡單用戶登錄和注冊頁面

    jsp+dao+bean+servlet(MVC模式)實現簡單用戶登錄和注冊頁面

    這篇文章主要介紹了jsp+dao+bean+servlet(MVC模式)實現簡單用戶登錄和注冊頁面,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Java 數據結構算法Collection接口迭代器示例詳解

    Java 數據結構算法Collection接口迭代器示例詳解

    這篇文章主要為大家介紹了Java 數據結構算法Collection接口迭代器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Java畢業(yè)設計實戰(zhàn)之生活旅行分享平臺的實現

    Java畢業(yè)設計實戰(zhàn)之生活旅行分享平臺的實現

    這是一個使用了java+Springboot+JPA+Jsp+Html+js+Ajax+maven+mysql開發(fā)的生活旅行分享平臺,是一個畢業(yè)設計的實戰(zhàn)練習,具有分享發(fā)布平臺該有的所有功能,感興趣的朋友快來看看吧
    2022-02-02
  • 詳解關于eclipse中使用jdk15對應javafx15的配置問題總結

    詳解關于eclipse中使用jdk15對應javafx15的配置問題總結

    這篇文章主要介紹了詳解關于eclipse中使用jdk15對應javafx15的配置問題總結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Java中LocalDateTime的具體用法

    Java中LocalDateTime的具體用法

    本文主要介紹了Java中LocalDateTime的具體用法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • Java基礎之簡單的圖片處理

    Java基礎之簡單的圖片處理

    這篇文章主要介紹了Java基礎之簡單的圖片處理,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04

最新評論