多线程中,共享的变量为何在main()里必须用final修饰? 代码如下,两个线程修改同一个list,为何在main里声明list的时候一定要用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()
{
synchronized(list){
do sth with the list.
}
}
});
Thread t2 = new Thread(new Runnable(){
@Override
public void run()
{
synchronized(list){
do sth with the list.
}
}
});
t1.start();
t2.start();
}
}
若是用匿名类的方式,就不用final来修饰list,不明白为什么。
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();
}
}
class WorkThread extends Thread{
List<String> list;
public void run(){
do sth with list
}
Work1(List<String> list)
{ this.list = list; }
}