Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中测试自定义锁_Java - Fatal编程技术网

在Java中测试自定义锁

在Java中测试自定义锁,java,Java,我有一个实现锁接口的MyLock类。现在MyLock中的构造函数接受两个线程对象作为参数 我正在为MyLock编写一个测试类 public class TestMyLock { static MyLock mylck; public static void main(String[] args) { Thread t1 = new Thread(new Runnable(){ public void run

我有一个实现锁接口的MyLock类。现在MyLock中的构造函数接受两个线程对象作为参数

我正在为MyLock编写一个测试类

public class TestMyLock
{
    static MyLock mylck;

    public static void main(String[] args)
    {           

        Thread t1 = new Thread(new Runnable(){
            public void run(){

                mylck.lock();       //1 - gives error
                            //Critical code

                mylck.unlock();                 
            }

        });
        Thread t2 = new Thread(new Runnable(){
            public void run(){

                mylck.lock();
                            //Critical code                 
                mylck.unlock();                 
            }

        });

        mylck = new MyLock(t1, t2);  //where to place this

        t1.start(); t2.start();

    }
}
我的测试代码哪里出错了。基本上,我需要测试我的MyLck功能


编辑:错误-1是因为myLck未初始化。它给出了一个编译错误。我想知道如何初始化它,因为要初始化,我需要传递线程对象。

我认为最好将mylck.lock()。。。在循环中使用mylck.unlock(),使其运行更长时间以检测缺陷(如果可行)。我们需要知道MyLock.lock()是如何实现的,以查看错误是什么。

我看不出这个主类有什么问题。锁的创建是在线程启动之前完成的,因此当call=>it's ok时,两个运行方法中使用的mylck引用将不会为null


另一方面,为什么要实现自己的锁?
java.util.concurrent.locks
包提供了几种常见的实现。

我正在尝试编写一个测试代码来验证我的硬件练习,即编写一个锁。好的,所以我认为您的测试代码是可以的。偏离路线取决于临界截面线以及如何测试这些线是否已真正“锁定”给出错误:哪一条?你确定这是正确的代码吗?(thread1 t1)您的代码与这里编写的代码完全一样,不会为我产生编译错误。您正在使用哪个编译器/IDE?