Java线程同步锁的选择
来源:互联网 发布:沉迷网络危害英语作文 编辑:程序博客网 时间:2024/05/01 19:09
在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,更多Java学习,请搜索疯狂Java;
在需要线程同步的时候如何选择合适的线程锁?
例:选择可以存入到常量池当中的对象,String对象等
public class SyncTest
{
private String name = "name";
public void method(String flag)
{
synchronized (name)
{
System.out.println(flag + ", invokemethod ....");
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 + ", invokemethod 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的魅力,充分激发每个学员对于编程的热爱,让学员在半年的时间内掌握8-10万的代码量,成为真正的技术高手,疯狂Java采用企业全真模拟开发训练,迅速积累项目经验。让学员迅速获得其他人需要花费两年才能获得的工作技能,无忧就业!
- Java线程同步锁的选择
- Java线程:线程的同步与锁
- Java线程:线程的同步与锁
- Java线程:线程的同步与锁
- Java线程:线程的同步与锁
- Java线程:线程的同步与锁
- Java线程:线程的同步与锁
- Java线程:线程的同步与锁
- Java线程:线程的同步与锁
- Java线程:线程的同步与锁
- Java线程:线程的同步与锁
- Java线程:线程的同步与锁
- Java线程:线程的同步与锁
- Java线程:线程的同步与锁
- Java线程:线程的同步与锁
- Java线程:线程的同步与锁
- Java线程:线程的同步与锁
- Java线程:线程的同步与锁
- java中各进制之间的转换
- Office 365初体验
- python 变量、json数据互转
- 一个乞丐的故事
- Android 自动识别TextView或者EditView里的url并在自己的应用程序里打开
- Java线程同步锁的选择
- NoSQL相关的新闻与技术
- system.img 解压和压缩
- x86 PSW 图解
- 数据库系统概述
- mysql命令行登陆
- JAVA之URL
- 正则表达式符号模式
- zoj_1542 Network