java - 线程对象可以设置为静态变量吗

标签 java multithreading

我想创建一个应该在其他 session 中共享的工作线程。基本上我想限制其他用户执行相同的过程。所以他们将通过我创建的对象线程的静态实例检索线程。如果线程还活着,那么他们会被提示错误。

是否有其他方法可以做到这一点,因为我在考虑将 Thread 对象放在静态对象中是否安全?我也在考虑应用程序上下文,但我不确定在 Java 中哪种方法更好?

最佳答案

将任何对象放置在静态或任何类型的共享位置本质上并不安全,但您需要注意设计。

声明

  static Thing t;

初始化

  if ( t == null ) {
       t = new Thing();
  } 

使用

t.dosomething();

现在如果两个线程同时命中初始化 block 会发生什么?您可以创建两个事物。可能不想这样,所以使用同步。

synchronized void intialise() {
    if ( t == null ) {
       t = new Thing();
  } 

}

如果两个线程试图同时使用 t 会发生什么。这取决于Thing做出的 promise 。如果它是线程安全的没问题,否则你的代码需要提供同步

  synchronized void doSomthing() {
        t.doSomething();
  } 

关于java - 线程对象可以设置为静态变量吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7172024/

相关文章:

java - 如何更新 Dynamo DB 中保留关键字的值。错误: Attribute name is a reserved keyword; reserved keyword: data

java - 机器人为什么要不停地运转?是否陷入了循环?

java - LibGDX Stage vs SpriteBatch 绘制游戏

Java 线程问题,处理程序消息数据被下一条消息覆盖

java - 谁在 Spring Security 中创建了 JSESSIONID cookie?

java - 无法在/WEB-INF/urlrewrite.xml 找到 urlrewrite conf 文件

c# - 连续读取 CF 上的多个 TCP 连接

android - handler.postDelayed 与 ScheduledThreadPoolExecutor.scheduleWithFixedDelay

java - 并发集合大小计算

java - ExecutorCompletionService 和 FixThreadPool 执行器之间的区别