Java 关于线程的问题
我只是在玩java中的线程。我有一个实现runnable的类Java 关于线程的问题,java,synchronization,Java,Synchronization,我只是在玩java中的线程。我有一个实现runnable的类 public class MyThread implements Runnable{ private boolean finished; //Other variables public void run(){ //Thread code } } 我的理解是,MyThread类型的每个线程都有自己的成员变量副本,对这些成员变量的写入不需要同步。这个假设正确吗?如果正确,访问需要同步的内容?有人
public class MyThread implements Runnable{
private boolean finished;
//Other variables
public void run(){
//Thread code
}
}
我的理解是,MyThread类型的每个线程都有自己的成员变量副本,对这些成员变量的写入不需要同步。这个假设正确吗?如果正确,访问需要同步的内容?有人愿意给出一个大纲或伪代码吗。?谢谢。- 每个MyThread实例都是一个新实例,就像普通的类和对象一样
- 复制本机类型的变量。这意味着更改一个线程中的变量对另一个线程没有任何影响。这些不必同步
- 对于对象,将复制其引用。这意味着两个线程可以引用同一个对象。如果两个线程同时操作该对象,则可能会出现问题。因此,这些访问必须同步
- 每个MyThread实例都是一个新实例,就像普通的类和对象一样
- 复制本机类型的变量。这意味着更改一个线程中的变量对另一个线程没有任何影响。这些不必同步
- 对于对象,将复制其引用。这意味着两个线程可以引用同一个对象。如果两个线程同时操作该对象,则可能会出现问题。因此,这些访问必须同步
- 不一定。您可以使用相同的
MyThread
实例创建多个线程。例如:
MyThread x = new MyThread();
new Thread(x).start();
new Thread(x).start();
new Thread(x).start();
现在将有三个线程都在同一个对象中运行代码
我建议您重新命名MyThread,因为它不是一个线程,而是一个线程要执行的任务。这就更清楚了(国际海事组织)。不一定。您可以使用相同的
MyThread
实例创建多个线程。例如:
MyThread x = new MyThread();
new Thread(x).start();
new Thread(x).start();
new Thread(x).start();
现在将有三个线程都在同一个对象中运行代码
我建议您重新命名MyThread,因为它不是一个线程,而是一个线程要执行的任务。这就更清楚了(IMO)。真正大的索引线索非常值得一读(是的,它有一些例子) 真正大的索引线索非常值得一读(是的,它有一些例子) 在这种情况下,所有三个线程(运行x)是否都看到相同的finished字段,因此如果一个线程中的
finished
发生了更改,那么其他两个线程是否看到了更改?或者这是一个例子,volatile
关键字会改变行为吗?@Andreas\u D:他们都会使用相同的字段,但如果没有volatile修饰符,他们可能看不到彼此的变化。接受。但这是否意味着如果线程在不同的实例上运行,就不需要同步任何东西?或者,在同一类型的不同实例上运行的线程之间究竟共享了什么?是的,如果它们在不同的实例上运行并且使用完全不同的值(例如,没有对共享的其他对象的引用),则应该可以。在这种情况下,所有三个线程(运行x)是否都看到相同的完成字段,因此,如果一个线程中的finished
发生了更改,那么其他两个线程是否看到了更改?或者这是一个例子,volatile
关键字会改变行为吗?@Andreas\u D:他们都会使用相同的字段,但如果没有volatile修饰符,他们可能看不到彼此的变化。接受。但这是否意味着如果线程在不同的实例上运行,就不需要同步任何东西?或者,在同一类型的不同实例上运行的线程之间究竟共享了什么?是的,如果它们在不同的实例上运行,并且使用完全不同的值(例如,没有对共享的其他对象的引用),则应该可以。