多线程之同步与死锁
来源:互联网 发布:建淘宝优惠群网站 编辑:程序博客网 时间:2024/05/20 13:05
方法定义的完整格式。
访问权限{public |default|protected|private}[final][static][synchronized]返回值类型|void 方法名称(参数类型 参数名称,.....)[throws Exception1,Exception2]{return[返回值|返回用处]};
一个多线程的程序如果通过Runnable接口实现的,则意味着类中的属性将被多个线程共享,那么这多个线程要操作同一资源时就有可能出现资源同步问题。
就是假如我手里有三个汉堡,同一刻有四个小盆友来拿,我口头答应的时刻与给他们汉堡的时刻就是时间段。在同一刻时,我答应了他们四个,到了给汉堡的时刻,才发现我只有3个汉堡,这就是资源同步问题。
想解决此类问题,就必须使用同步。所谓的同步就是指多个操作在一个时间段内只有一个线程进行,其他线程等待此线程完成之后才可以继续执行。
解决资源共享的同步操作,可以使用同步代码块和同步方法两种方式完成。
1、同步代码块。
关键字synchronized。
public class MyThread04 implements Runnable {
private int ticket = 5;
@Override
public void run() {
// TODO Auto-generated method stub
for (int i = 0; i < 100; i++) {
synchronized (this) {
if (ticket > 0) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("卖票:ticket=" + ticket--);
}
}
}
}
}
public class SyncDemo02 {
public static void main(String[] args) {
MyThread04 m = new MyThread04();
new Thread(m).start();
new Thread(m).start();
new Thread(m).start();
}
}
2、同步方法
就是使用synchronized关键字将一个方法声明成同步方法。
public class MyThread04 implements Runnable {
private int ticket = 5;
private synchronized void count() {
if (ticket > 0) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("卖票:ticket=" + ticket--);
}
}
public void run() {
// TODO Auto-generated method stub
for (int i = 0; i < 100; i++) {
count();
}
}
}死锁就是指两个线程都在等待对方先完成,造成了程序的停滞。
多个线程共享同一资源时需要进行同步,以保证资源操作的完整性,但是过多的同步就有可能产生死锁。
- 多线程之同步与死锁
- Java多线程之同步与死锁
- Java多线程之同步与死锁
- 多线程 同步与死锁
- 多线程之同步死锁
- Java 多线程同步与死锁
- JAVA - 多线程 - 同步与死锁
- 多线程之同步和死锁
- 多线程同步与死锁深入分析
- Java多线程的同步与死锁
- Java多线程 线程同步与死锁
- [Java]多线程之同步及死锁
- Java多线程之线程同步和死锁
- java多线程同步死锁
- 多线程同步死锁问题
- 黑马程序员-JAVA基础-多线程的安全、同步与死锁
- 多线程模拟售票及线程同步与死锁
- 9. 多线程 Part 3 同步与死锁 --- 学习笔记
- 昔日对手成股东,完美1亿美元收购盛大
- c5 URLs and URIs - The URI Class
- [LeetCode] 4Sum
- eeprom 的读写
- 100 - The 3n + 1 problem
- 多线程之同步与死锁
- Perl和C、C++等语言通信的编程方法
- 转:c++局部变量
- CPU的标志寄存器
- 蓝桥杯——趣味算式
- some tips of read
- 不能与牛肉一起吃的食物
- UVA 之10010 - Where's Waldorf?
- UVA 之401 - Palindromes