关于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
“同”字从字面上容易理解为一起动作
其实不是,“同”字应是指协同、协助、互相配合。
当两个线程同时访问一个资源时候,这里的资源有必要解释一下。一个对象中的某个属性,可以理解为对象的资源。
注意点:
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
相关文章推荐
- Python动态类型的学习---引用的理解
- 土人系列AS入门教程 -- 对象篇
- C#托管堆对象实例包含内容分析
- C#线程间不能调用剪切板的解决方法
- C#实现获取不同对象中名称相同属性的方法
- javascript asp教程第十一课--Application 对象
- PowerShell中使用Out-String命令把对象转换成字符串输出的例子
- C#线程同步的三类情景分析
- C#获取进程或线程相关信息的方法
- 简单对比C#程序中的单线程与多线程设计
- C#停止线程的方法
- VBS教程:对象-正则表达式(RegExp)对象
- C#子线程更新UI控件的方法实例总结
- C#线程队列用法实例分析
- C#检查指定对象是否存在于ArrayList集合中的方法
- sql2008启动代理未将对象应用到实例解决方案
- C#编程自学之类和对象
- C++中对象的常引用、动态建立和释放相关知识讲解
- C++使用CriticalSection实现线程同步实例
- 基于C++实现的线程休眠代码