同步与死锁
来源:互联网 发布:手机魔术软件哪些 编辑:程序博客网 时间:2024/06/10 04:14
以卖车票为例:
class SyThread implements Runnable{
private int ticket = 5;
@Override
public void run() {
//for(int i=5; i>0; i--)
for(int i=0; i <100; i++){
if(ticket >0){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("卖出票数为:"+ticket--);
}
}
}
}
}
public class SynchronizedDemo01 {
public static void main(String[] args) {
SyThread st = new SyThread();
Thread mt1 = new Thread(st);
Thread mt2 = new Thread(st);
Thread mt3 = new Thread(st);
mt1.start();
mt2.start();
mt3.start();
}
卖出票数为:5
卖出票数为:5
卖出票数为:4
卖出票数为:3
卖出票数为:2
卖出票数为:1
卖出票数为:-1
卖出票数为:0
上述程序说明在资源共享的情况下如果不让各线程同步,会造成结果出现异常的情况;在这个卖票的系统中票数出现的负数的情况;
需要注意的是:
用Thread类的时候,如果要让线程休眠,那么需要加上捕获异常;
对于同一个类,可以有多个线程进行同时使用,这就是多线程;
class SyThread implements Runnable{
private int ticket = 5;
@Override
public void run() {
//for(int i=5; i>0; i--)
for(int i=0; i <100; i++){
synchronized(this){ //加上synchronized关键字的目的是让线程在使用资源的时候判断有没有其它的线程正在使用资源
if(ticket >0){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("卖出票数为:"+ticket--);
}
}
}
}
}
public class SynchronizedDemo01 {
public static void main(String[] args) {
SyThread st = new SyThread();
Thread mt1 = new Thread(st);
Thread mt2 = new Thread(st);
Thread mt3 = new Thread(st);
mt1.start();
mt2.start();
mt3.start();
}
}
运行结果:
卖出票数为:5
卖出票数为:4
卖出票数为:3
卖出票数为:2
卖出票数为:1
加上synchronized关键字的目的是让线程在使用资源的时候判断有没有其它的线程正在使用资源
如果使用太多的线程同步,则可能会造成死锁
死锁的意思就是说:
甲想要乙的书,乙想要甲的画;
甲对乙说:你给我你的书,我就把画给你;
乙对甲说:你给我你的画,我就把书给你;
结果双方都因为对方没有主动给你,而在那里等待着,这就是程序的死锁;
- 同步与死锁
- 同步与死锁
- 线程同步与死锁
- 线程同步与死锁
- 多线程 同步与死锁
- 同步、通信与死锁
- 线程同步与死锁
- 同步与死锁
- java 同步与死锁
- 线程--同步与死锁
- Java 多线程同步与死锁
- JAVA线程同步与死锁
- 线程的同步与死锁
- 多线程之同步与死锁
- JAVA - 多线程 - 同步与死锁
- java27.线程------同步与死锁
- 操作系统--进程同步与死锁
- Java中的同步与死锁
- u-boot的nand层次分析
- STL源码剖析---红黑树原理详解下
- TCP 程序设计
- SOA体系结构基础培训教程
- java 操作字符串需注意的几个问题
- 同步与死锁
- ARM的启动方式和bootloader解析(上)
- 上海最新住房贷款(含公积金贷款,商业贷款,组合贷款)
- Linux 开发环境工具
- 3120卷
- 关于函数调用约定的学习笔记
- POJ1177+线段树+扫描线
- 宿主机跟Vmware中的linux使用host-only,bridge 方式通信
- 排列组合应用于计数的思路 [大三四八九月实习]