当线程无法获取信号量时(由于缺少许可证)会发生什么.它会被转移到等待状态吗?
编辑:当信号量可用时,线程是否会恢复先前的执行序列.
java concurrency multithreading semaphore java.util.concurrent
ListeMot.txt文件包含336529 Line
如何捕捉特定的线条.
这是我的代码
int getNombre()
{
nbre = (int)(Math.random()*336529);
return nbre ;
}
public String FindWord () throws IOException{
String word = null;
int nbr= getNombre();
InputStreamReader reader = null;
LineNumberReader lnr = null;
reader = new InputStreamReader(new FileInputStream("../image/ListeMot.txt"));
lnr = new LineNumberReader(reader);
word = lnr.readLine(nbr);
}
Run Code Online (Sandbox Code Playgroud)
为什么我不能得到word = lnr.readLine(nbr); ??
谢谢
PS我是java新手!
我在目录中有一个haskell文件my.hs.在那个目录中我运行GHCi.在提示我输入
:load my.hs
Run Code Online (Sandbox Code Playgroud)
GHCi中是否有一些命令会列出从文件中加载的所有函数的名称?我没有在显示的帮助中找到它:?在GHCi
以下两个方法定义在语义上是等价的吗?为什么?为什么不?
版本A:
private static synchronized void foo() {
bar();
}
Run Code Online (Sandbox Code Playgroud)
版本B:
private static Semaphore available = new Semaphore(1, true);
private static void foo() {
available.acquire();
try {
bar();
}
finally {
available.release();
}
}
Run Code Online (Sandbox Code Playgroud) 换句话说,我不希望线程等待它无法访问锁(如在同步中),我想线程执行只是在它无法获得锁时立即返回.
像这样简单的布尔锁可能允许多个线程访问.
private static boolean lockAvailable = true;
private boolean acquireLock() {
if(lockAvailable) {
lockAvailable = false;
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?实现这一目标的最佳/最简单方法是什么?
编辑:
谢谢你指出信号量(!)
所以再看一遍这段代码是防弹吗?
private final static Semaphore lock = new Semaphore(1, true);
public void tryAndDoSomething() {
if(lock.tryAcquire()) {
try {
// only single thread can access here at one time
} finally {
lock.release();
}
}
}
Run Code Online (Sandbox Code Playgroud)
更新:
我意识到我需要可重入的功能,所以我创建了一个简单的非阻塞重入.为任何对您如何执行此操作感兴趣的人发布代码.任何想要这种功能的人当然应该使用现有的 Java类java.util.concurrent.locks.ReentrantLock:
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
/**
* SimpleNonBlockingLock ensures that only a single thread can call …Run Code Online (Sandbox Code Playgroud) 嗨,我有一个问题,我有一个对象类型为Object Class的对象,我想将其转换为类型为java.swing.JButton的对象吗?这是代码:
private void EventSelectedFromList(java.awt.event.ActionEvent evt) {
// add code here
try
{
String eventName = (String)EventList.getSelectedItem();// get the event
EventSetDescriptor ed = eventValue(events,eventName);
if(ed.getListenerType() == ActionListener.class){// check if selected event has an actionListerner listener
AddEventHandlerButton.setEnabled(true);// Enable eventhandler button
String objectName = (String) ObjectList.getSelectedItem();
Object ob = FindObject(hm, objectName);// retrieve the object from hashmap
// now 'ob' of type of JButton, I want to add ActionListener to this JButton???
Class zzz = ob.getClass();
System.out.println(zzz);
} else {
AddEventHandlerButton.setEnabled(false);
}
}catch(Exception …Run Code Online (Sandbox Code Playgroud)