当前位置 : 主页 > 编程语言 > java >

Java多线程同步

来源:互联网 收集:自由互联 发布时间:2022-07-13
多线程之间没有资源共享,不会出现死锁;有多个资源共享,就会出现数据非预期,出现线程不安全问题。 Java一般通过synchronized同步锁来支持多线程同步。 以售票为例: package com .


多线程之间没有资源共享,不会出现死锁;有多个资源共享,就会出现数据非预期,出现线程不安全问题。
Java一般通过synchronized同步锁来支持多线程同步。

以售票为例:

package com.test.thread;


/**
* 描述: 演示 - synchronized 关键字
*/
public class C3Synchronized implements Runnable {

/**
* 修饰实例方法:对当前实例加锁,进入同步代码前要获得当前实例的锁
* synchronized (this) {}
*
* 修饰静态方法:对当前类对象加锁,进入同步代码前要获得当前类对象的锁
*
* 修饰代码块:指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。
* private Object obj = new Object(); // 作为一个锁
* synchronized (obj) {}
*/

private int tickets = 10;

@Override
public void run() {
do {
// 调用售票方法
try {
saleTicket();
} catch (InterruptedException e) {
e.printStackTrace();
}
} while (tickets > 0);
}

/**
* 描述: 定义一个同步方法 卖票方法
*/
private synchronized void saleTicket() throws InterruptedException {
if (tickets > 0) {
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName() + "---卖出的票" + tickets--);
}
}

/**
* 描述: 主函数
*/
public static void main(String[] args) {
C3Synchronized ticket = new C3Synchronized();
new Thread(ticket, "线程一").start();
new Thread(ticket, "线程二").start();
new Thread(ticket, "线程三").start();
new Thread(ticket, "线程四").start();
}

}

Java多线程同步_加锁


如果去掉​​synchronized​​,执行结果:

Java多线程同步_资源共享_02


可以明显看到多个线程同时买票,结果为6的情形。


【文章原创作者:美国多ip站群服务器 http://www.558idc.com/mgzq.html
上一篇:adbd cannot run as root in production builds
下一篇:没有了
网友评论