3
回答
线程同步问题,为何实例方法不行
华为云4核8G,高性能云服务器,免费试用   
http://bbs.csdn.net/topics/390384588
<无标签>
举报
lyxtime
发帖于5年前 3回/115阅
共有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字段是静态的,只有一份内存呀,多个对象共享这个类变量呀,???
顶部