java多线程——同步的前提
来源:互联网 发布:软件售后服务条款 编辑:程序博客网 时间:2024/06/08 02:32
同步的前提
- 必须要有两个或以上的线程
- 必须是所有的线程使用同一个锁
这样保证同步中只能有一个线程在运行
在多线程安全问题设置同步时候注意
- 明确哪些代码是多线程运行代码
- 明确哪些是共享数据
- 明确多线程运行代码中,哪些语句是操作共享数据的
同步的优点
解决了多线程的安全问题
同步的缺点
多个线程判断锁,较为耗费资源
class ThreadDemo1 { public static void main(String[] args) { Ticket tic = new Ticket(); Thread t1 = new Thread(tic); Thread t2 = new Thread(tic); Thread t3 = new Thread(tic); t1.start(); t2.start(); t3.start(); }}class Ticket implements Runnable { private int ticket = 500; Object obj = new Object(); public void run() { while (true) { synchronized (obj) { if (this.ticket > 0) { try { Thread.sleep(10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " ... " + this.ticket); this.ticket--; } } } }}
class ThreadDemo2 { public static void main(String[] args) { Customer cus = new Customer(); Thread t1 = new Thread(cus); Thread t2 = new Thread(cus); t1.start(); t2.start(); }}/** * 一个银行,有两个客户向银行存钱,每个客户有300元,每次均是存100元,每个人存3次 * */class Bank{ private int sumMoney; public synchronized void add(int money){ this.sumMoney = this.sumMoney + money; try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("sumMoney = " + this.sumMoney); }}class Customer implements Runnable{ private Bank bank = new Bank(); public void run(){ for (int i = 1; i<=3; i++){ bank.add(100); } }}
0 0
- java多线程——同步的前提
- 多线程同步的前提
- java--同步的前提
- 线程同步的前提
- java多线程—Java 多线程同步的五种方法
- 同步的前提和同步函数
- java的多线程同步
- Java 多线程的同步
- Java 多线程的同步
- Java多线程的同步
- JAVA学习——java多线程的同步和异步
- Java多线程实践—Java自己携带的同步类
- Java多线程开发五——线程的同步
- synchronized——Java多线程的同步问题
- Java——多线程的同步实现(锁)
- JAVA多线程同步的简单例子(—)
- Java多线程学习笔记——从Java JVM对多线程数据同步的一些理解
- 解决问题的前提——放空自己
- MAC下安装git
- Compare Numbers
- 黑马程序员-JAVASE入门(数组)
- poi 导入excel 数据转对象
- 2015-4-7C语言学习日记
- java多线程——同步的前提
- java jar文件的深入认识
- Sicily 14261. Generating Words
- 控制器常见的创建方式
- java 可运行jar的设置介绍
- unity的协程的用途
- pandas 做图显示中文标签
- Javascript之BOM
- 利用RecyclerView和自定义Image Loader实现本地图片加载