多线程二 (同步)
来源:互联网 发布:counter python 编辑:程序博客网 时间:2024/05/22 15:13
1) demo
public class TestSync { public static void main(String[] args) { MyRunnable m = new MyRunnable(); Thread t1 = new Thread(m); Thread t2 = new Thread(m); t1.start(); t2.start(); }}class MyRunnable implements Runnable { private Foo foo = new Foo(100); @Override public void run() { synchronized(this) { for (int i=0;i<5;i++) { foo.fix(10); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + ":" + foo.getX()); } } } public int fix(int y) { return this.foo.fix(y); } }class Foo { private int x; public Foo(int x) { super(); this.x = x; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int fix(int y) { x = x - y; return x; }}
private Foo foo = new Foo(100); foo对象对于线程t1 和 线程t2 是共享资源,当多个线程操作同一个资源时,需要对访问的资源进行加锁;
2) 概念
a. java中每个对象都有一个内置锁
b. 当程序运行到非静态的synchorized同步方法上时,自动获得与正在执行代码类的对象锁(this),一个对象只有一个锁,如果一个线程获得这个对象锁,则其他线程不可以获得锁,直到第一个线程被释放;
c. 线程睡眠时,它锁持有的锁不会被释放
d. 线程可以获得多个锁,比如在一个对象的同步方法上,调用另一个对象的同步方法,这样就获取了两个对象的同步锁
e. 在使用同步synchrozed时,需要指定在哪个对象上同步,也就是说要获取哪个对象的锁
3) 同步静态方法
需要用于整个类的锁,这个对象就是这个类,比如
synchronized(TestSync.class) {...}
4) 阻塞
如果线程试图进入同步方法,但是锁被占用,则该线程在这个对象上被阻塞;即线程会进入这个对象的池中,直到这个对象的锁被释放
0 0
- 多线程同步(二)
- 多线程二 (同步)
- 多线程(二)--线程同步
- 【Java多线程】(二)多线程同步
- 多线程数据同步总结(二)
- MFC 多线程及线程同步 (二)
- Java多线程——同步(二)
- 多线程(二)生命周期和同步
- 【JAVA学习】(二)JAVA 多线程同步
- java多线程:线程同步(二)
- java多线程(二)---线程的同步
- 多线程售票同步代码段(二)
- 多线程(二)--同步及死锁
- (二)多线程之间实现同步
- VC多线程编程二(多线程同步问题)
- 多线程之二 线程同步
- 多线程之二:线程同步
- C#多线程同步(二)【Mutex】
- 求奇偶子回文串个数
- 删除U盘里隐藏的文件
- 【暮色天】非农略显平淡 谨防反弹修复(8.4)
- C# 3种定时器对比
- Java之JMX
- 多线程二 (同步)
- 最大公约数1——迭代法
- aws帐单 2014-08-04 09:00
- 单源最短路—dijkstra算法
- 人脸识别《一》opencv人脸识别之预处理
- 计时器--精确到10毫秒(精确度可以自行设定)
- jobdu1475 非常可乐
- “Spark上流式机器学习算法实现”中期检查报告
- 使用百度地图API根据坐标显示地图