如何测试Non Thread安全类?

Mah*_*ran 3 java multithreading

我是Threads的新手.我正在阅读Java Concurrency in Practice.我在书中找到了以下例子.

@NotThreadSafe
public class UnSafeSequence
{
     private int value;
     public int getNext()
     {
         return value++;
     }
}
Run Code Online (Sandbox Code Playgroud)

我想通过编写访问此类的几个线程(或更多)来测试此代码,以获得线程安全感.

我试过这些,但不确定如何测试这些例子.

class MyThread implemented Runnable
{
    public void run()
    {
        //Should I create a new object for UnSafeSequence here ?
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

Gra*_*ray 5

如果每个线程都有自己的实例,UnSafeSequence那么它就不会显示问题.您需要做的是创建实例UnSafeSequence外部的MyThread实例并将其传递给每个实例的构造函数MyThread.

 UnSafeSequence unsafe = new UnSafeSequence();
 ...
 new Thread(new MyThread(unsafe)).start();
 new Thread(new MyThread(unsafe)).start();
 ...
 class MyThread implemented Runnable {
       private UnSafeSequence unsafe;
       public MyThread(UnSafeSequence unsafe) {
            this.unsafe = unsafe;
       }
       public void run() {
            ...
            unsafe.getNext();
            ...
       }
 }
Run Code Online (Sandbox Code Playgroud)

在学习线程的同时,请务必阅读有关ExecutorService其他优秀课程的内容.这是Sun ^ H ^ H ^ H Oracle的一个很好的教程.