小编use*_*791的帖子

为什么我应该在多线程程序中"最终"共享变量

我的问题是为什么我应该使用final来装饰变量,列表?它由匿名内部类的实例使用而不是final,它不会编译.

代码如下所示:

public class TwoThreadsOneListCurrModi
{
  public static void main(String[] args)
  {    
     final List<String> list = Collections.synchronizedList(new ArrayList<String>());

    for (int i =0 ; i<20;i++)
      list.add(String.valueOf(i));
    Thread t1 = new Thread(new Runnable(){

      @Override
      public void run()
      {
          synchronize(list) {
          System.out.println("size of list:" +list.size());
          }
      }
    });

    t1.start();  
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用普通课,那很好.

public class TwoThreadsOneListCurrModi2

{
  public static void main(String[] args)
  {    
     final List<String> list = Collections.synchronizedList(new ArrayList<String>());
    initialize list;

    Thread t1 = new WorkThread(list);
    Thread t2 = new WorkThread(list);    
    t1.start();  
    t2.start();
  } …
Run Code Online (Sandbox Code Playgroud)

java concurrency

2
推荐指数
1
解决办法
1734
查看次数

标签 统计

concurrency ×1

java ×1