使用线程作为对象

时间:2015-07-08 18:47:28

标签: java multithreading oop object

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

对象类

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

使用最短的代码量,最有效的方法是什么?

感谢。

2 个答案:

答案 0 :(得分:5)

mapValues

然后

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
   }
}

答案 1 :(得分:3)

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

  

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();