【问题标题】:Use a thread as an object使用线程作为对象
【发布时间】:2015-07-08 18:47:27
【问题描述】:

如何将线程用作对象?我试图这样做。

对象类

public class Object implements Runnable{
public String name = "";
public void run(){
  //logic code here
}
}

我通过这样做来调用它。

Thread contract1 = new Thread(new Object());
    contract1.name = "foo";
    contract1.start();

我得到了错误

The field Thread.name is not visible

什么是最足智多谋且所需代码最少的方法?

谢谢。

【问题讨论】:

  • 不要将你的班级命名为Object。它已经存在于 Java 中。
  • 所以您的Object 类有一个名为name可访问 字段,而不是Thread 类。

标签: java multithreading oop object


【解决方案1】:
public class YourRunnable implements Runnable{
   private String name;

   public YourRunnable(String name) {
       this.name = name;
   }

   public void run() {
      //logic code here
   }
}

然后

Thread contract1 = new Thread(new YourRunnable("foo"));
contract1.start();

所以使用构造函数。

编辑:但是要做你想做的事,你要做的就是

public class YourRunnable implements Runnable{
   public String name;

   public void run() {
      //logic code here
   }
}

然后

YourRunnable yourRunnable = new YourRunnable();
Thread contract1 = new Thread(yourRunnable);
yourRunnable.name = "foo";
contract1.start();

【讨论】:

  • 使用构造函数很棒。但问题是如何访问YourRunnable 的成员,并且可能存在实际需要的情况。
  • @mastov 在他的特殊情况下很好,他只是在另一个类中初始化变量,老实说,解决方案是使用构造函数。
  • 只是说这个问题可能比代码本身所暗示的更广泛。感谢您的编辑。立即投票。
  • 这就是我们使用带有公共 getter 和 setter 的私有字段的原因 :)
  • @chillworld 同意,getter+setter 是一个不错的选择,在实际代码中我永远不会忘记它们;我只是想展示这个与原始版本相比改动最小的版本
【解决方案2】:

在您的代码中,您试图更改线程的名称。您真正想要做的是更改线程正在调用的对象的名称。您可以在构造函数中执行此操作,或者在创建新线程之前声明对象并设置名称。

1) 通过创建构造函数:

public class SomeObject implements Runnable{
   private String name;

   public SomeObject(String name){
      this.name = name;
   }
   ...
}

那么声明将如下所示:

Thread contract1 = new Thread(new SomeObject("myNamehere"));
contract1.start();

2)通过设置名称(我认为您打算这样做):

SomeObject contractObject1 = new SomeObject();
contractObject1.name = "myNamehere";
Thread contract1 = new Thread(contractObject1);
contract1.start();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 2019-09-30
    相关资源
    最近更新 更多