Java线程的同步与死锁
2016-07-27 22:42
423 查看
一、线程同步
同步就是指多个操作在同一个时间段只能有一个线程进行,其他线程要等待此线程完成之后才可以继续进行
在java中synchronized关键字可以通过两种方式实现同步:
*同步代码块(在java中有四种代码块:普通代码块、构造块、静态块、同步块)
*同步方法
1、使用同步代码块要传入一个锁定的对象,一般即当前对象this
2、同步方法:尽量使用同步方法
同步操作与异步操作相比,异步操作速度比较快,但是同步操作是线性安全的操作
尽量使用同步方法而非同步代码块
二、线程死锁
线程同步过多就有可能造成死锁
同步就是指多个操作在同一个时间段只能有一个线程进行,其他线程要等待此线程完成之后才可以继续进行
在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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序