Java 多线程之间的数据共享(类级)
需要你的帮助,让我的基本权利。 请考虑下面的片段(来自一本书):Java 多线程之间的数据共享(类级),java,multithreading,Java,Multithreading,需要你的帮助,让我的基本权利。 请考虑下面的片段(来自一本书): class地板延伸螺纹 { 最终整数最大值=100000000; 整数; 挥发性双d=0; 公共地板(内部n,内部优先) { 数字=n; 设置优先级(优先级); start();//启动线程 } 公开募捐 { 对于(int i=1;i
class地板延伸螺纹
{
最终整数最大值=100000000;
整数;
挥发性双d=0;
公共地板(内部n,内部优先)
{
数字=n;
设置优先级(优先级);
start();//启动线程
}
公开募捐
{
对于(int i=1;i
这里变量d被标记为volatile。这意味着我们希望确保线程之间的可见性,因此它是一个共享变量。
我还看到了一些其他的例子,其中我们在Thread类中有一个变量,但不希望共享?? 不是每个新地板对象都应该有自己的双d变量吗 请帮助我,因为我被其他类似的例子弄糊涂了,这些例子没有将同一类变量标记为volatile
提前谢谢。我看不出有任何理由让d不稳定。每个实例都有自己的副本。您甚至可以将d设置为run方法的本地 我看不出有任何理由让d不稳定。每个实例都有自己的副本。您甚至可以将d设置为run方法的本地 我看不出有任何理由让d不稳定。每个实例都有自己的副本。您甚至可以将d设置为run方法的本地 我看不出有任何理由让d不稳定。每个实例都有自己的副本。您甚至可以将d设置为run方法的本地 “我们在线程类中有一个变量,但不希望确定?”:没有得到这一部分,你能纠正/澄清一下吗?嗯,从构造函数开始线程对我来说似乎相当棘手。嗨,瓦伦丁,这是一个拼写错误。对此我深表歉意。这是共享(不确定)。嗨,吓人..我同意不建议从构造函数启动线程,因为它可能导致在不完整状态下发布对象(这)。因为它来自一本书。所以我只是把它贴在这里:)“我们在线程类中有一个变量,但不希望确定?”:没有得到这一部分,你能纠正/澄清一下吗?嗯,从构造函数开始线程对我来说似乎有点狡猾。嗨,瓦伦丁,这是一个打字错误。抱歉。这是共享(不确定)。嗨,吓人..我同意不建议从构造函数启动线程,因为它可能导致在不完整状态下发布对象(这)。因为它来自一本书。所以我只是把它贴在这里:)“我们在线程类中有一个变量,但不希望确定?”:没有得到这一部分,你能纠正/澄清一下吗?嗯,从构造函数开始线程对我来说似乎有点狡猾。嗨,瓦伦丁,这是一个打字错误。抱歉。这是共享(不确定)。嗨,吓人..我同意不建议从构造函数启动线程,因为它可能导致在不完整状态下发布对象(这)。因为它来自一本书。所以我只是把它贴在这里:)“我们在线程类中有一个变量,但不希望确定?”:没有得到这一部分,你能纠正/澄清一下吗?嗯,从构造函数开始线程对我来说似乎有点狡猾。嗨,瓦伦丁,这是一个打字错误。抱歉。这是共享(不确定)。嗨,吓人..我同意不建议从构造函数启动线程,因为它可能导致在不完整状态下发布对象(这)。因为它来自一本书……所以我把它贴在这里:)
class Flooring extends Thread
{
final int MAX = 100000000;
int number;
volatile double d = 0;
public Flooring(int n, int priority)
{
number = n;
setPriority(priority);
start(); // start the thread
}
public void run()
{
for(int i = 1; i < MAX; i++)
d = d + (Math.PI + Math.E + Math.floor(i)) / (double)i;
System.out.println(“Inside Thread” + number + “ : ” + d);
}
}
public class FloorThread
{
public static void main(String[] args)
{
for(int i = 1; i < 11; i++)
new Flooring(i, 11-i); // priority decreases
}
}