Thread-Safe在java中的含义是什么?我们什么时候称为Thread-Safe?

the*_*ava 9 java

我不是以任何方式理解这个概念.

public class SomeName {

     public static void main(String args[]) {

     }

}
Run Code Online (Sandbox Code Playgroud)

这是我的类SomeName.现在这里的主题是什么.

  1. 我们将该类称为线程.
  2. 当其他一些对象试图访问其方法或成员时,我们将此类称为线程吗?
  3. 当其他一些对象试图访问此对象时,我们将此类称为线程吗?
  4. 当我们在java中调用某些东西是线程安全的时候意味着什么?

dnu*_*tle 9

线程安全意味着避免几个问题.最常见也可能是最差的称为threadlock.旧的比喻是用餐哲学家的故事.他们非常有礼貌,当其他人也这样做时,他们永远不会拿出筷子来取食.如果他们都在同一时间伸出手,那么他们都会在同一时间停下来,等待......没有任何事情发生,因为他们太礼貌了,不能先行.

正如其他人指出的那样,如果你的应用程序永远不会创建额外的线程,而只是从主方法运行,那么只有一个线程或一个"餐饮哲学家",因此不能发生线程锁定.当你有多个线程时,避免线程锁的最简单方法是使用"监视器",这只是一个被搁置的对象.实际上,您的方法必须在访问线程之前在此监视器上获取"锁定",因此不会发生冲突.但是,您仍然可以使用threadlock,因为可能有两个对象尝试访问两个不同的线程,每个线程都有自己的监视器.对象A必须等待对象B释放其对监视器对象1的锁定; 对象B必须等待对象A释放其对监视器对象2的锁定.所以现在你又回到了threadlock.

简而言之,线程安全并不是非常难以理解,但确实需要时间,实践和经验.第一次编写多线程应用程序时,您遇到threadlock.然后你将学习,很快就会变得非常直观.最大的警告是,您需要尽可能简化应用程序的多线程部分.如果你有很多线程,有很多监视器和锁,那么确保你的餐饮哲学家永远不会冻结会变得更加困难.

Java教程非常好地完成了线程化; 这是我所需要的唯一资源.