Lock对象在使用的时候必须被显示地创建、锁定和释放。它和synchronized关键字的作用类似,举一个例子如下:
======================整数生成类
public abstract class IntGenerator {
private volatile boolean canceled=false;
public abstract int next();
public void cancel()
{ this.canceled=false;
}
public boolean isCanceled()
{
return this.canceled;
}
}
===========================实现类
public class MutexEvenGenerator extends IntGenerator{
private int currentEvenValue=0;
private java.util.concurrent.locks.Lock lock=new ReentrantLock();
@Override
public int next() {
// TODO Auto-generated method stub
try {
lock.lock();
++currentEvenValue;
Thread.yield();
++currentEvenValue;
return currentEvenValue;
}finally{
lock.unlock();
}
}
public static void main(String[] args){
EvenChecker.test(new MutexEvenGenerator(),10);
}
}
================================
public class EvenChecker implements Runnable{
private IntGenerator generator;
private final int id;
public EvenChecker(IntGenerator generator,int id) {
// TODO Auto-generated constructor stub
this.generator=generator;
this.id=id;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(!generator.isCanceled())
{
int val=generator.next();
if(val%2!=0)
{
System.out.println(val+ " is not even!");
generator.cancel();
}
else
{
//System.out.println(val+" is even!");
}
}
}
public static void test(IntGenerator gp,int count)
{
System.out.println("Press Ctrl+C to Exit");
ExecutorService exec=Executors.newCachedThreadPool();
for(int i=0;i<count;i++)
exec.execute(new EvenChecker(gp,i));
}
public static void test(IntGenerator gp)
{
test(gp,10);
}
}
分享到:
相关推荐
由于我的本本没有 Caps Lock 及NumLK 键的指示灯,总感觉使用不便,特别是在输入密码的时候,不知道是否打开了字母的大小写锁定,因此上网搜了一下源代码,凑成了这个小工具,能在系统托盘区显示Caps Lock 和 NumLK ...
这是个人开发的笔记本电脑大写键CAPSLOCK状态显示软件,开发语言C#,显示效果挺好的。欢迎下载使用。
Capslock键的状态在托盘区显示;win32 汇编;在WindowsXP和Windows10 1803下试了下能够正常显示。
redisson lock和tryLock 分布式锁简单练习
WINXP下无法使用CAPS LOCK键关闭Caps Lock指示灯
Capslock键的状态在托盘区显示;win32 汇编;在WindowsXP和Windows10 1803下试了下能够正常显示。 双击图标退出,或者右击图标选择退出。 前面那个可以不用下载了。
Lock锁是对象锁,仅在同一对象中,锁才会生效。(不做论证) (以下场景皆为单例模式下运行) lock.lock()的加锁方式,会使后续请求的线程堵塞等待。(方案A) lock.tryLock()的加锁方式,不会堵塞,会立即返回加锁...
.NET LOCK使用方法 网上收集,版权为原作者所有,谢谢
使用C#,winfrom界面,解决线程并发功能界面演示。当多个线程同时调用一个方法或一个数据,出现并发情况,这个时候使用Lock进行方法或数据的锁定,解决并发带来的数据异常或其他问题。
关键字-回车映射-ahk回车映射-左手回车 ;;快捷键x说明 上下左右 ... CapsLock+q 箭头上--防止误触屏-CapsLock+q也映射为箭头上 ;; CapsLock+e 删除键-删除前面的-Backspace ;; CapsLock+r 删除键-删除后面的--Del
Lock、Synchoronized和ReentrantLock的使用
lock(this)的使用说明,lock关键字讲解!!!!!!!!!!!!
gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 ...
获取WakeLock实例后通过acquire()获取相应的锁,然后进行其他操作,最后使用release()释放(释放是必须的)。 Note: 1. 在使用以上函数的应用程序中,必须在其Manifest.xml文件中加入下面的权限: ...
设定CapsLock ScrollLock NumLock
Lock
实现yarn.lock与package-lock.json相互转换
lock 使用演示代码,让大家认识到LOCK的用途
npm install -g yarn yarn install 安装失败,使用官方下载的yarn.lock文件
Capslock+软件下载http://cjkis.me/capslock+/