Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多线程之间的数据共享(类级)_Java_Multithreading - Fatal编程技术网

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