Java核心内库-线程-线程同步-同步代码块
2016-11-30 13:41
183 查看
线程的不安全问题:当多线程并发访问同一个资源对象的时候,可能出现线程不安全的问题。
解决方案:同步代码块、同步方法、锁机制
同步锁:是一个概念,为了保证每个线程都能正常执行原子操作,Java引入了线程同步机制。
同步监听对象/同步锁/同步监听器/互斥锁
对象的同步锁只是一个概念,可以想象为在对象上标记一个锁。
Java程序允许使用任何对象作为同步监听对象,但是一般我们把当前并发的共同资源作为同步监听对象。
注意:在任何时候,最多允许一个线程拥有同步锁,谁拿到锁就进入代码块,其他的线程只能在外面等着
解决方案:同步代码块、同步方法、锁机制
同步代码块
语法:synchronized (同步锁){ //需要同步操作的代码 }
同步锁:是一个概念,为了保证每个线程都能正常执行原子操作,Java引入了线程同步机制。
同步监听对象/同步锁/同步监听器/互斥锁
对象的同步锁只是一个概念,可以想象为在对象上标记一个锁。
Java程序允许使用任何对象作为同步监听对象,但是一般我们把当前并发的共同资源作为同步监听对象。
注意:在任何时候,最多允许一个线程拥有同步锁,谁拿到锁就进入代码块,其他的线程只能在外面等着
class Apple1 implements Runnable{ private int num = 50; //苹果总数 @Override public void run() { for (int i=0;i<50;i++){ // 同步代码块 synchronized (this){ // this,表示Apple1对象,该对象属于多线程共享的资源 if (num>0){ System.out.println(Thread.currentThread().getName()+"吃了编号为"+num+"的苹果"); try { Thread.sleep(10); // 此时是为了模拟网络延迟 } catch (InterruptedException e) { e.printStackTrace(); } num--; } } } } } public class Main { public static void main(String[] args){ // 创建三个线程(同学)吃苹果 Apple1 a = new Apple1(); new Thread(a,"小A").start(); new Thread(a,"小B").start(); new Thread(a,"小C").start(); } }
相关文章推荐
- Java核心内库-线程-线程同步-同步锁(Lock)
- Java核心内库-线程-线程同步-同步方法
- Java核心内库-线程-并行和并发
- Java核心内库-线程-线程通信-wait和notify方法介绍
- Java核心内库-线程-理解进程和线程
- Java核心内库-线程-通过继承Thread类创建并启动线程
- Java核心内库-线程-通过实现Runnable接口的方式创建并启动线程
- Java核心内库-线程-多线程的优势
- Java核心内库-线程-使用匿名内部类创建并启动线程
- Java核心内库-线程-创建进程操作
- java线程学习4——线程同步之同步代码块
- Java核心内库-线程-并行和并发
- java线程学习4——线程同步之同步代码块
- Java多线程-线程的同步(同步代码块)
- Java基础之线程——管理线程同步代码块(BankOperation4)
- Java 编程下的并发线程之间的同步代码块死锁
- 【线程同步】java实现生产者消费者问题与线程中的wait与notify总结
- Java对多线程的支持(一) - Thread类、Runnable接口、Daemon线程、线程同步
- Java多线程基础篇(04)-线程同步机制和线程间通信
- Java--线程--线程控制,线程安全,线程同步,线程等待,线程交互,死锁,互斥锁,读写锁