3
回答
线程同步问题,为何实例方法不行
华为云实践训练营,热门技术免费实践!>>>   
http://bbs.csdn.net/topics/390384588
<无标签>
举报
lyxtime
发帖于5年前 3回/110阅
共有3个答案 最后回答: 5年前

我看了你的代码。

如果不加static,说明同步的是GZipThread对象,而你下面的代码:

GZipThread[] threads=new GZipThread[THREAD_COUNT];
        for(int i=0;i<threads.length;i++){
            threads[i]=new GZipThread(pool);
            threads[i].start();
        }
申请了很多个 GZipThread对象,每个GZipThread的incrementFilesCompressed是同步的,这样每个对象都一份内存。

而加了static incrementFilesCompressed则是GZipThread类方法,这样的方法不属于对象,在多个对象中也只有一份内存。

--- 共有 1 条评论 ---
lyxtime不加static ,即使每个对象的 incrementFilesCompressed方法都有一份内存,但filesCompressed字段是静态的,只有一份内存呀,多个对象共享这个类变量呀,??? 5年前 回复

引用来自“震秦”的答案

我看了你的代码。

如果不加static,说明同步的是GZipThread对象,而你下面的代码:

GZipThread[] threads=new GZipThread[THREAD_COUNT];
        for(int i=0;i<threads.length;i++){
            threads[i]=new GZipThread(pool);
            threads[i].start();
        }
申请了很多个 GZipThread对象,每个GZipThread的incrementFilesCompressed是同步的,这样每个对象都一份内存。

而加了static incrementFilesCompressed则是GZipThread类方法,这样的方法不属于对象,在多个对象中也只有一份内存。

不加static ,即使每个对象的  incrementFilesCompressed方法都有一份内存,但filesCompressed字段是静态的,只有一份内存呀,多个对象共享这个类变量呀,???
顶部