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

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

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

在需要線程同步的時(shí)候如何選擇合適的線程鎖?
例:選擇可以存入到常量池當(dāng)中的對(duì)象,String對(duì)象等  

復(fù)制代碼 代碼如下:

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();

    }

}


線程類:
復(fù)制代碼 代碼如下:

public class MyThread1 extends Thread
{
    SyncTest syncTest;

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

本來應(yīng)該是要實(shí)現(xiàn)線程thread1和thread2同步,線程thread3和thread4同步的,但結(jié)果呢?
卻是使得線程thread1、thread2、thread3、thread4同步了,很是郁悶。
我推薦選用的同步鎖對(duì)象:
復(fù)制代碼 代碼如下:

package com.rcx.thread;

public class SyncTest
{
    // 特殊的instance變量,用于充當(dāng)同步鎖的對(duì)象
    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長(zhǎng)度的byte數(shù)組充當(dāng)同步鎖對(duì)象,不會(huì)產(chǎn)生很詫異的錯(cuò)誤同時(shí)不會(huì)占用很大內(nèi)存。

相關(guān)文章

最新評(píng)論