JAVA | 24
来源:互联网 发布:oracle数据库搜索引擎 编辑:程序博客网 时间:2024/05/23 01:00
同步就是一个线程对象等待另一个线程对象执行完毕。
同步与异步相比较,异步操作的执行速度高,同步操作时数据的安全性较高,属于安全的线程。大部分情况下使用异步。
多个线程访问同一资源时,一定要处理好同步,可以采用同步代码块或者同步方法来实现。
过多地使用同步可能会造成死锁,死锁是程序开发中由于逻辑错误而产生的问题。并不是简单地就出现的。
class MyThread implements Runnable { private int ticket = 100; @Override public void run() { for (int i = 0; i < 200; i++) { if (this.ticket > 0) { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " " + this.ticket); this.ticket--; } } }}public class Main { public static void main(String[] args) { MyThread myThread1 = new MyThread(); Thread A = new Thread(myThread1,"Thread A"); Thread B = new Thread(myThread1,"Thread B"); Thread C = new Thread(myThread1,"Thread C"); Thread D = new Thread(myThread1,"Thread D"); A.start(); B.start(); C.start(); D.start(); }}
同步代码块
class MyThread implements Runnable { private int ticket = 1000; @Override public void run() { for (int i = 0; i < 2000; i++) { synchronized (this) { //当前操作每次只允许一个对象进入 if (this.ticket > 0) { try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " " + this.ticket); this.ticket--; } } } }}public class Main { public static void main(String[] args) { MyThread myThread1 = new MyThread(); Thread A = new Thread(myThread1,"Thread A"); Thread B = new Thread(myThread1,"Thread B"); Thread C = new Thread(myThread1,"Thread C"); Thread D = new Thread(myThread1,"Thread D"); A.start(); B.start(); C.start(); D.start(); }}
同步方法
class MyThread implements Runnable { private int ticket = 100; @Override public void run() { for (int i = 0; i < 200; i++) { this.sale(); } } public synchronized void sale(){ if (this.ticket > 0) { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " " + this.ticket); this.ticket --; } }}public class Main { public static void main(String[] args) { MyThread myThread1 = new MyThread(); Thread A = new Thread(myThread1,"Thread A"); Thread B = new Thread(myThread1,"Thread B"); Thread C = new Thread(myThread1,"Thread C"); Thread D = new Thread(myThread1,"Thread D"); A.start(); B.start(); C.start(); D.start(); }}
阅读全文
0 0
- JAVA | 24
- Java Generic 泛型 - Java 学习笔记 (24)
- java基础(24)--java.util.Properties类
- Java计算24点
- 24-java代码雨
- 24点:java版
- java学习笔记24
- Java学习笔记24
- Java基础-24
- Java心得24
- Java学习 2015.9.24
- Java学习-24天
- Java知识点24
- JAVA 注解 12-24
- (java)leetcode-24
- 033-Java-24
- java算24点
- 24点java代码
- 生产者-消费者问题
- 高程笔记-值的存储、访问、复制和传参
- static与并发
- redis-list类型简单操作
- Java 中 i++和++i的区别
- JAVA | 24
- 一台电脑使用多个GitHub账号配置方法
- 【BZOJ1003】物流运输(ZJOI2006)-DP+最短路
- Eigen
- golang生成ssh 密钥方法
- softmax 反向传播
- 读书笔记之初见JVM内存区域
- ASP.NET MVC筛选器之特殊筛选器IOverrideFilter
- 【LeetCode】268. Missing Number