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);
}
}
分享到:
相关推荐
### 学会使用Windows XP的20个特殊技巧 #### 技巧1:在记事本中自动记录文件的打开时间 在Windows XP系统中,记事本是一款轻量级的文字处理工具。若想记录每次打开某个文本文件的时间,只需要在文件的第一行输入`....
首先,我们需要理解“走线框显示不足”是指在使用Cadence Allegro 16.6进行布线时,界面上只显示了层面选择,而其他关键的布线设置如Line Lock、Line Width以及Bubble等没有出现。这可能导致设计者无法精确控制布线...
通过对`Lock`接口的学习,我们不仅掌握了如何更灵活地控制锁的获取和释放,还学会了如何利用`Condition`实现更精细的线程同步策略。此外,对于读-写锁的介绍也为我们解决特定场景下的并发问题提供了新的思路。
让你学会使用这个简单,高效的库! 先来一波效果效果展示: 手势解锁效果 今天给大家介绍的是本人良心制作的一个手势解锁开源库,大家有什么建议和想法都可以发到我的邮箱: diosamolee2014@gmail.com 或者评论,我会为...
开发者应学会使用Android Studio的调试工具,如Logcat用于日志输出,模拟器或真机进行测试,以确保应用在各种设备和Android版本上都能正常工作。 总的来说,"Simple-Android-lock-screen"项目涵盖了Android应用开发...
理光Caplio G3是一款由理光公司生产的数码相机,本电子说明书将提供关于如何安全使用该相机的详细指南,确保用户在使用前彻底阅读安全注意事项,并在使用相机时随时查阅此用户手册,以便能够正确、安全地操作相机并...
- **Suspense**:用于延迟渲染组件,可以更好地控制组件的加载和显示,提高用户体验。 - **Ref 和 Reactive**:Vue3 提供了ref和reactive函数,使响应式数据绑定更加底层和强大。 2. **从零搭建Vue3项目**: - ...
在代码中,通过`Chr(i)`函数将ASCII码转换为对应的字符,这样可以动态地显示用户输入的所有按键。例如,ASCII码为97的字符是'a',ASCII码为48的字符是'0',以此类推。这种方式利用了ASCII码表的标准定义,使得键盘...
通过本实验,学生不仅学会了如何使用VHDL设计十进制频率计,还掌握了EDA工具的应用,这对于深入理解数字系统设计和验证流程至关重要。此外,实验还强调了理论知识与实践操作的结合,有助于提高学生的工程实践能力和...
【标题】"code_lock.zip" 是一个与单片机开发相关的项目,主要使用了 C/C++ 语言。这个项目的重点是构建一个基于STC12C5A60S2微控制器的电子密码锁系统。STC12C5A60S2是一款常见的8位单片机,以其低功耗、高性价比和...
VIM在vi的基础上进行了大量的改进和增强,如加入了图形界面支持、颜色高亮显示、鼠标操作等功能。相较于其他编辑器,VIM的特点在于它的命令行模式,用户可以通过简单的键盘快捷键实现高效的操作。 #### 二、VIM ...
【电脑快捷键】是提高电脑操作效率的重要工具,尤其对不太熟悉电脑操作的朋友来说,学习并熟练使用快捷键能显著提升工作效率。...对于不熟悉电脑操作的人,学会使用快捷键是迈向电脑高手的第一步。
例如,关闭动态键盘、在写字板中使用智能ABC输入法、打开“文字服务和输入语言”对话框、设置显示语言栏、添加郑码输入法、设置全拼输入法的词语联想、显示其他语言栏图标、调整Caps Lock键功能、删除特定输入法、...
3. **I/O接口控制**:LED显示模块作为I/O设备,通过DATA线和LED_LOCK信号进行数据传输,控制地址为0x08000000。 4. **键盘结构与扫描**:介绍线性键盘和矩阵键盘,矩阵键盘在此应用中更为常见,4x6矩阵键盘通过扫描...
4. 在多线程环境下,线程安全地访问控件通常需要使用控件的Invoke或BeginInvoke方法,确保UI更新操作在正确的线程中执行。 【实验步骤】: 1. 新建Windows窗体应用程序项目。 2. 在Form1加载事件中调用`...
开发者需要熟练掌握各种同步机制,包括`synchronized`、`Lock`、信号量、条件变量以及原子变量,并学会使用相应的工具进行分析和调试,才能编写出高效且可靠的并发程序。同时,深入研究开源库的源码,可以进一步提升...
7. Xcode使用:学会如何在Xcode中创建项目、调试代码、运行应用到模拟器或真机。 8. 测试与调试:理解单元测试的重要性,以及如何在Xcode中进行代码调试。 这个自编写的高德地图demo是一个很好的学习资源,可以帮助...
- **MACHINE LOCK**:锁定机床,仅显示数值变化,不实际移动。 - **DRY RUN**:空运行,忽略F代码,按进给倍率移动。 - **BLOCK**:单步运行,复合循环在循环结束后停止。 - **SKIP**:跳过带"/"的程序段。 - *...
10. **调试技巧**:在开发过程中,学会使用Visual Studio的调试工具,如断点、单步执行、查看变量值等,对查找和修复bug非常有帮助。 通过实现C#版贪吃蛇,你可以深入理解C#的基础语法、面向对象编程、图形界面设计...
了解SQL语句,学会使用Entity Framework等ORM框架,可以简化数据库操作。 七、安全性考虑 在线聊天系统必须关注数据的安全性,包括用户密码的加密存储、传输过程的SSL/TLS加密、防止SQL注入等。C# 提供了...