本帖最后由 wzg1015 于 2014-10-30 21:38 编辑
晕,好不容易打了一遍,出现错误了,重打
首先是多线程中的零时变量是否可以作为监视器,不可以的化为什么下面可行?
- public class Test {
- protected final static ExecutorService pool = Executors.newFixedThreadPool(300);
- private String name="";
- //用于标记
- int i=0;
- /**需要测试的方法**/
- public void setName(String name) {
- synchronized (name) { 每次进入,name应该是一个新的临时变量,为什么开始可以正常
- i++;
- this.name=name+i;
- System.out.println(this.name);
- }
- }
- public static void main(String[] args) {
- Test test=new Test();
- for(int i=0;i<100;i++) {
- pool.execute(new Runnable() {
- public void run() {
- test.setName("测试");
- }
- });
- }
- }
- }
复制代码
当不使用同步出现重复
使用synchronized (name) ,不出现重复,而且是标准顺序的,也就是0-99顺序排列
使用synchronized (this.name) ,不出现重复,但是杂序,为什么区别这么大
|