手机
当前位置:查字典教程网 >编程开发 >Java >解析Java线程同步锁的选择方法
解析Java线程同步锁的选择方法
摘要:在需要线程同步的时候如何选择合适的线程锁?例:选择可以存入到常量池当中的对象,String对象等复制代码代码如下:publicclassSy...

在需要线程同步的时候如何选择合适的线程锁?

例:选择可以存入到常量池当中的对象,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线程同步锁的选择方法】相关文章:

Java解析XML的四种方法详解

java关键字final使用方法详解

Java教程各种接口的介绍

Java线程中断的本质深入理解

深入Java线程中断的本质与编程原则的概述

JAVA中 终止线程的方法介绍

java线程之使用Runnable接口创建线程的方法

java中Servlet处理乱码的方法

Java多线程的用法详解

生成8位随机不重复的数字编号的方法

精品推荐
分类导航