Java:如果 java 库不是线程安全的,这是否意味着我不能在单独的线程中运行它?

标签 java multithreading

所以我正在使用这个第 3 方 java 库,在文档中它说,不是线程安全的。

但是,我只是在 UI 之外的单独线程中运行它,并且它按预期运行良好(否则整个应用程序将锁定,直到一切完成)。

现在我在线程中运行非线程安全库,我能期待什么?

更新:

我可以为这个第三方库的每个新类实例运行每个单独的线程吗?或者这是否意味着我不能在每个类中使用多个线程。

Run in thread 1 : ThirdPartyProcessing tpp1 = new ThirdPartyProcessing();
Run in thread 2 : ThirdPartyProcessing tpp2 = new ThirdPartyProcessing();
Run in thread 3 : ThirdPartyProcessing tpp3 = new ThirdPartyProcessing();

最佳答案

So what can I expect now that I am running a non thread safe library in a thread?

如果您仅在一个线程中运行非线程安全的应用程序/库,那么您应该不会遇到任何问题。

非线程安全意味着“使用多个线程运行不安全”。因此,如果您使用多个线程来运行它或访问/更新其数据结构,那么可能会发生不好的事情。不能保证它们在您每次运行时发生,并且(通常)不可能预测这些坏事将会是什么。然而,这种可能性总是存在的。

could I run each separate threads for each new class instances of this 3rd party library? or does this mean that I can't just use more than one thread per class.

这取决于为什么第 3 方库不是线程安全的。如果类的每个实例完全独立于其他实例(即,如果它们之间没有共享数据结构),那么这可以工作。另一方面,如果他们共享东西(例如通过静态),那么可能会出现问题。理论上,如果共享数据不可变,这些问题甚至可能存在。 (仅供引用,后一种情况的问题是“安全发布”的问题。)

底线是,除非您知道如何/为什么该库不是线程安全的,否则您尝试在不同线程中运行多个实例是在冒险。

关于Java:如果 java 库不是线程安全的,这是否意味着我不能在单独的线程中运行它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8199801/

相关文章:

Java 线程处理

multithreading - 如何在 Go 中用 channel 替换 goroutine 循环

multithreading - Haskell:STM事务中无限期阻塞的线程

java - 访问 Object[] 中 HashMap 的键/值对

JavaFX 任务调度和并发

java - Android 中使用 GoogleAPI 进行音译

multithreading - 什么时候需要在 TThread 中进行同步?

JavaFx:为什么剂量 'Thread.sleep( )' 停止 UI 线程?

java - 在 Maven Java 项目中直接使用 Jolokia JVM 代理

java - 在 Android/Java 中格式化 MAC 地址而不会产生不必要的垃圾