加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何测试非线程安全类?

发布时间:2020-12-15 04:07:48 所属栏目:Java 来源:网络整理
导读:我是Threads的新手.我正在阅读 Java Concurrency in Practice.我在书中找到了以下例子. @NotThreadSafepublic class UnSafeSequence{ private int value; public int getNext() { return value++; }} 我想通过编写访问此类的几个线程(或更多)来测试此代码,以
我是Threads的新手.我正在阅读 Java Concurrency in Practice.我在书中找到了以下例子.

@NotThreadSafe
public class UnSafeSequence
{
     private int value;
     public int getNext()
     {
         return value++;
     }
}

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

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

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

谢谢你的帮助.

解决方法

如果每个线程都有自己的UnSafeSequence实例,那么它就不会证明问题.您需要做的是在MyThread实例之外创建一个UnSafeSequence实例,并将其传递给每个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();
            ...
       }
 }

在学习线程的同时,请务必阅读有关ExecutorService和其他优秀类的知识.这是一个good tutorial from Sun^H^H^H Oracle.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读