您的位置:首页 > 编程语言 > Java开发

Java线程的同步与死锁

2016-07-27 22:42 423 查看
一、线程同步

同步就是指多个操作在同一个时间段只能有一个线程进行,其他线程要等待此线程完成之后才可以继续进行



在java中synchronized关键字可以通过两种方式实现同步:

*同步代码块(在java中有四种代码块:普通代码块、构造块、静态块、同步块)

*同步方法

1、使用同步代码块要传入一个锁定的对象,一般即当前对象this

public class MyThread implements Runnable {
private int ticket = 10;

@Override
public void run() {
for (int t = 0; t < 20; t++) {
synchronized (this) {//当前操作每一次只允许一个对象进入
if (this.ticket > 0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + this.ticket--);
}
}
}
}

}


2、同步方法:尽量使用同步方法

public class MyThread implements Runnable {
private int ticket = 10;

@Override
public void run() {
for (int t = 0; t < 20; t++) {
sale();//调用同步方法
}
}
public synchronized void sale() {
if (this.ticket > 0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + this.ticket--);
}
}
}


同步操作与异步操作相比,异步操作速度比较快,但是同步操作是线性安全的操作

尽量使用同步方法而非同步代码块

二、线程死锁

线程同步过多就有可能造成死锁
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java