启动线程:
TestThread test = new TestThread();
test.start();这种启动线程好吗? 已经new 一个对象了,为什么还要在线程上加锁???

解决方案 »

  1.   

    你说的是线程同步(synchronized) 从而锁定共享资源么?
      

  2.   

    是 synchronized 加锁问题。
    如果我在线程的run()中要利用一个变量,变量是通过线程中一个Set()中得到的,例如:
        public synchronized void setTestList(List lst) {
            this.testList = lst;
        }已经声明了一个对象,启动线程。
    TestThread test = new TestThread();
    test.setTestList(list);
    test.start();
    其中的synchronized加锁还有意义吗?
      

  3.   

    仍然有意义啊,test.setTestList(list)方法调用时刻,同一进程内其它线程均不能访问setTestList()方法
      

  4.   

    但是,已经New一个对象了,同一个进程到
    TestThread test = new TestThread();
    时,从新划分一个内存空间,也就没有资源抢占的问题?
    synchronized加锁还有意义吗?
      

  5.   

    但是,已经New一个对象了,同一个进程到
    TestThread test = new TestThread();
    时,从新划分一个内存空间,也就没有资源抢占的问题?
    synchronized加锁还有意义吗?
      

  6.   

    但是,已经New一个对象了,同一个进程到
    TestThread test = new TestThread();
    时,从新划分一个内存空间,也就没有资源抢占的问题?
    synchronized加锁还有意义吗?
      

  7.   

    通过设定方法为同步方法,主要是为规避(从有可能地角度)同一资源在同一进程内多线程之间被交叉访问.设置setTestList()为同步方法,程序执行到test.setTestList(list)方法时,目前应是线程安全的,但test.start()方法调用时,有可能会造成线程非安全:1.若start()针对test对象的setTestList()方法未开启其它线程并调用setTestList()方法,当前进程处于线程安全状态 2.若 start()针对test对象开启其它线程并调用setTestList()方法,且开启线程的数量大于1,当前进程处于线程非安全状态.显然,线程非安全状态时对方法加上synchronized关键字就存在意义.
      

  8.   

    当然要加synchronized了,防止多个线程调用同个test对象的该方法啊,定义方法的时候设计人员又不清楚你是每次都new一个出来
      

  9.   

    是 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加锁还有意义吗?
      

  10.   

    是 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加锁还有意义吗?
      

  11.   

    synchronized就是为了解决多线程同步的问题,但多线程并不一定非要他们去访问临界资源,所以只有当多线程可能要去访问某一个相同临界资源的时候才需要synchronized,所以第一,你要确定你是否要synchronized[就是说,在某一个时刻,只有一个线程,可以执行setTestList方法,执行完了以后,别的线程才可以继续执行],第2,TestThread test = new TestThread();是新了一个对象,但临界资源并没有新一个,就是说你的list,并没有new,所以,如果你要访问这个,并可能更改list,那最好synchronized,我就能说这么多了,具体也说不清楚,表达有限,将就点看看吧
      

  12.   

    public synchronized void setTestList(List lst) {
            this.testList = lst;
        }这个函数申明是 public,暴露出来了,就要考虑线程同步的问题。如果只会像作者那样的方式调用,那么就不应该申明为 public
    可以考虑对程序稍做修改。
        public TestThread(List lst) {
            this.testList = lst;
        }
      

  13.   

    这不是什么已经new 一个对象事儿........