相关疑难解决方法(0)

原始数据类型在Java中是否是线程安全的

Java中的原始数据类型是int&shortthread-safe吗?我已执行以下代码,有时无法看到预期的结果500.

public class SampleThree extends Thread
{
    static long wakeUpTime = System.currentTimeMillis() + (1000*20);
    static int inT;
    public static void main(String args[])
    {
        System.out.println("initial:" + inT);
        for(int i=0; i<500; i++)
            new SampleThree().start();
        try {
            Thread.sleep(wakeUpTime - System.currentTimeMillis() + (1000*30));
            System.out.println("o/p:" + inT);
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }

    public void run()
    {
        try {
            long s = wakeUpTime - System.currentTimeMillis();
            System.out.println("will sleep ms: " + s);
            Thread.sleep(s);
            inT++; // System.out.println(inT);
        }
        catch(Exception e) {
            e.printStackTrace();
        } …
Run Code Online (Sandbox Code Playgroud)

java primitive thread-safety

34
推荐指数
2
解决办法
3万
查看次数

将 String 类型引用标记为 Volatile 安全吗?

我读过一些帖子和文章说我们不应该将java对象声明为易失性的,因为这样一来,只有引用变得易失性。这里有些例子:

链接1 链接2 链接3

Sonar 的建议是“非原始字段不应该是“易失性”的”,然而,它也表明所描述的问题涉及可变对象。“类似地,将可变对象字段标记为易失性意味着对象引用是易失性的,但对象本身是易失性的。不是'。

我的问题是:将 java String 声明为 volatile 是否安全?

java string volatile immutability

8
推荐指数
1
解决办法
1837
查看次数

使用join()的Java多线程程序在计算相邻数字之和时给出错误结果

我编写了这个简单的多线程程序,将1到100,000之间的数字相加。运行此命令时,最终结果得到的值不同(值小于预期的5000050000)。当我仅使用一个线程执行程序时,它给出了正确的结果。该程序还适用于较小的值,例如100。可能出了什么问题?提前致谢。

class Calculation {

  private long total=0;
  public void calcSum(long start, long end) {
      long i = start;
      for( ;i<=end; i++) {
          total += i;
      }
  }
  public long getTotal() {
     return total;
  }
}

class CalculatorThread extends Thread{
   private long start;
   private long end;
   private Calculation calc;
   public CalculatorThread(long start, long end, Calculation calc) {
       this.start = start;
       this.end = end;
       this.calc = calc;
   }
   @Override
   public void run() {
       calc.calcSum(start, end);
   }
}

public class ParallelTest {

  public …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading java-memory-model java-threads

5
推荐指数
1
解决办法
265
查看次数