0

我正在尝试使用线程编写一个基本程序。假设我有两个线程,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) {
        }
    }
}
4

1 回答 1

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();
        }
    }
 }

现在,一次只有一个线程能够访问锁定/解锁语句中的 consumeResource 方法中的代码行。很容易证明从 Darth run 方法调用 consumeResource。

于 2012-09-17T21:41:03.990 回答