是 synchronized 加锁问题。 如果我在线程的run()中要利用一个变量,变量是通过线程中一个Set()中得到的,例如: public synchronized void setTestList(List lst) { this.testList = lst; }已经声明了一个对象,启动线程。 TestThread test = new TestThread(); test.setTestList(list); test.start(); 其中的synchronized加锁还有意义吗?因为,已经New一个对象了,同一个进程到 TestThread test = new TestThread(); 时,从新划分一个内存空间,也就没有资源抢占的问题? synchronized加锁还有意义吗?
是 synchronized 加锁问题。 如果我在线程的run()中要利用一个变量,变量是通过线程中一个Set()中得到的,例如: public synchronized void setTestList(List lst) { this.testList = lst; }已经声明了一个对象,启动线程。 TestThread test = new TestThread(); test.setTestList(list); test.start(); 其中的synchronized加锁还有意义吗?因为,已经New一个对象了,同一个进程到 TestThread test = new TestThread(); 时,从新划分一个内存空间,也就没有资源抢占的问题? synchronized加锁还有意义吗?
synchronized就是为了解决多线程同步的问题,但多线程并不一定非要他们去访问临界资源,所以只有当多线程可能要去访问某一个相同临界资源的时候才需要synchronized,所以第一,你要确定你是否要synchronized[就是说,在某一个时刻,只有一个线程,可以执行setTestList方法,执行完了以后,别的线程才可以继续执行],第2,TestThread test = new TestThread();是新了一个对象,但临界资源并没有新一个,就是说你的list,并没有new,所以,如果你要访问这个,并可能更改list,那最好synchronized,我就能说这么多了,具体也说不清楚,表达有限,将就点看看吧
public synchronized void setTestList(List lst) { this.testList = lst; }这个函数申明是 public,暴露出来了,就要考虑线程同步的问题。如果只会像作者那样的方式调用,那么就不应该申明为 public 可以考虑对程序稍做修改。 public TestThread(List lst) { this.testList = lst; }
如果我在线程的run()中要利用一个变量,变量是通过线程中一个Set()中得到的,例如:
public synchronized void setTestList(List lst) {
this.testList = lst;
}已经声明了一个对象,启动线程。
TestThread test = new TestThread();
test.setTestList(list);
test.start();
其中的synchronized加锁还有意义吗?
TestThread test = new TestThread();
时,从新划分一个内存空间,也就没有资源抢占的问题?
synchronized加锁还有意义吗?
TestThread test = new TestThread();
时,从新划分一个内存空间,也就没有资源抢占的问题?
synchronized加锁还有意义吗?
TestThread test = new TestThread();
时,从新划分一个内存空间,也就没有资源抢占的问题?
synchronized加锁还有意义吗?
如果我在线程的run()中要利用一个变量,变量是通过线程中一个Set()中得到的,例如:
public synchronized void setTestList(List lst) {
this.testList = lst;
}已经声明了一个对象,启动线程。
TestThread test = new TestThread();
test.setTestList(list);
test.start();
其中的synchronized加锁还有意义吗?因为,已经New一个对象了,同一个进程到
TestThread test = new TestThread();
时,从新划分一个内存空间,也就没有资源抢占的问题?
synchronized加锁还有意义吗?
如果我在线程的run()中要利用一个变量,变量是通过线程中一个Set()中得到的,例如:
public synchronized void setTestList(List lst) {
this.testList = lst;
}已经声明了一个对象,启动线程。
TestThread test = new TestThread();
test.setTestList(list);
test.start();
其中的synchronized加锁还有意义吗?因为,已经New一个对象了,同一个进程到
TestThread test = new TestThread();
时,从新划分一个内存空间,也就没有资源抢占的问题?
synchronized加锁还有意义吗?
this.testList = lst;
}这个函数申明是 public,暴露出来了,就要考虑线程同步的问题。如果只会像作者那样的方式调用,那么就不应该申明为 public
可以考虑对程序稍做修改。
public TestThread(List lst) {
this.testList = lst;
}