Java 使用线程作为对象

Java 使用线程作为对象,java,multithreading,oop,object,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 fie

如何使用线程作为对象?我试图这样做

对象类

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
要做到这一点,用最短的代码量,哪种方法最有效

谢谢

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

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

1) 通过创建构造函数:

那么声明应该是这样的:

Thread contract1 = new Thread(new SomeObject("myNamehere"));
contract1.start();
2) 通过设置名称(我认为这是您打算做的):


不要给类命名
对象
。它已经存在于Java中。因此您的
对象
类有一个名为
名称
的可访问字段,而不是
线程
类。使用构造函数非常好。但问题是如何访问
YourRunnable
的成员,可能在某些情况下确实需要这样做。@马斯托夫在他的特殊情况下,他只是在另一个类中初始化变量,老实说,解决方法是使用构造函数,只是说问题可能比代码本身所暗示的更广泛。谢谢你的编辑。现在向上投票。这就是我们使用公共getter和setter的私有字段的原因:)@chillworld同意,getter+setter是一个不错的选择,我在真实代码中永远不会忘记它们;我只是想展示这张照片,与原作相比,改动最小
Thread contract1 = new Thread(new SomeObject("myNamehere"));
contract1.start();
SomeObject contractObject1 = new SomeObject();
contractObject1.name = "myNamehere";
Thread contract1 = new Thread(contractObject1);
contract1.start();