您的位置:首页 > 其它

关于synchronize同步的理解

2016-07-21 12:25 169 查看
何为同步就是协同步调,按预定的先后次序进行运行。如:你说完,我再说。
“同”字从字面上容易理解为一起动作
其实不是,“同”字应是指协同、协助、互相配合。


当两个线程同时访问一个资源时候,这里的资源有必要解释一下。一个对象中的某个属性,可以理解为对象的资源。

注意点:

1:什么情况需要用到synchronize

答:多个线程同时访问一个类中的资源(属性)

 

2:在哪里加synchronize

答:在当前资源类的方法上加synchronize,表示对当先对象加锁,运行到该方法处需要等待,等待上一个进程完成

package com.wf.loader;

public class Test{

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {

        Dog d = new Dog();

        MyThread my1 = new MyThread (d);

        MyThread my2 = new MyThread (d);

        my1.start();

        my2.start();

    }

}

class MyThread extends Thread {

    public Dog d = null;

    

    public MyThread(Dog d) {

        this.d = d;

    }

    

    @Override

    public void run() {

        d.print();

    }

    

}

class Dog {

    int i = 0;

    

    public synchronized void print() {

        for (; i < 10; i++) {

            System.out.println(this.toString() + "------------" + i);

        }

    }

}

com.wf.loader.Dog@bcbc------------0

com.wf.loader.Dog@bcbc------------1

com.wf.loader.Dog@bcbc------------2

com.wf.loader.Dog@bcbc------------3

com.wf.loader.Dog@bcbc------------4

com.wf.loader.Dog@bcbc------------5

com.wf.loader.Dog@bcbc------------6

com.wf.loader.Dog@bcbc------------7

com.wf.loader.Dog@bcbc------------8

com.wf.loader.Dog@bcbc------------9

com.wf.loader.Dog@bcbc------------0

com.wf.loader.Dog@bcbc------------1

com.wf.loader.Dog@bcbc------------2

com.wf.loader.Dog@bcbc------------3

com.wf.loader.Dog@bcbc------------4

com.wf.loader.Dog@bcbc------------5

com.wf.loader.Dog@bcbc------------6

com.wf.loader.Dog@bcbc------------7

com.wf.loader.Dog@bcbc------------8

com.wf.loader.Dog@bcbc------------9
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  对象 线程