我正在尝试使用线程编写基本程序。假设我有两个线程,t1和t2并锁定x。假设锁定x被分配给t1。什么时候由于锁定x被分配给t1,t2将无法处理?我试图创建一个简单的例子来演示锁/线程如何工作。
我感谢你对这件事的任何帮助。
这是我到目前为止所得到的:
班级天行者:
import java.util.*;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Skywalker{
public static void main(String args[]){
Thread t1 = new Thread("station 1");
Thread t2 = new Thread("station 2");
t1.start();
t2.start();
}
}
达斯上课:
import java.util.Random;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Darth implements Runnable{
String stationName;
Lock x = new ReentrantLock();
Random r = new Random();
public Darth(String name){
stationName = name;
}
public void run(){
try{
x.lock();
System.out.println(stationName + "is working");
sleep(randomTime);
x.unlock();
} catch(Exception e) {
}
}
}
答案 0 :(得分:0)
您应该将锁定放在一个类中以保护“资源访问”,例如:
class SharedResource {
private static Lock lock = new ReentrantLock();
public static void consumeResource(){
try{
lock.lock();
//just one thread a time here
int i = 10;
//mock consuming shared resource:
while(i>0){
i--;
System.out.println(Thread.currentThread().getName() + " is in");
Thread.sleep(1000);
}
}finally{
lock.unlock();
}
}
}
现在只需一个线程就可以访问在unlock / unlock语句中的consumeResource方法中的代码行。很容易显示从Darth run方法调用consumeResource。