多线程-线程同步问题
来源:互联网 发布:马克斯cms手机站 编辑:程序博客网 时间:2024/05/29 14:50
多线程编程 由于系统的线程调度具有一定的随机性 所以当多个线程来访问一个数据时 会偶尔出现线程安全问题
有以下几个方法:
1.同步代码块(使用synchronized)
2.同步方法(提供一个线程安全的的方法实现)
3.同步锁(定义锁对象 加锁 释放锁)
实体类
package Tongbu;public class Account { private String AccountNo; private double balance; public String getAccountNo() { return AccountNo; } public void setAccountNo(String accountNo) { AccountNo = accountNo; } public double getBalance() { return balance; } public void setBalance(double balance) { this.balance = balance; } public Account() { super(); // TODO Auto-generated constructor stub } public Account(String accountNo, double balance) { super(); AccountNo = accountNo; this.balance = balance; }}
线程类
package Tongbu;public class DrawThread extends Thread { private Account account; private int drowAccount; public DrawThread(String name,Account account, int i) { super(name); this.account = account; this.drowAccount = i; } public void run() { /*使用account作为同步监视器 任何线程进入下面同步代码块之前必须获得acccout账户的锁定 其他线程无法获得锁 加锁 修改 释放锁 */ synchronized (account) { if(account.getBalance()>=drowAccount) { System.out.println(getName()+"取钱成功 吐出钞票 "+drowAccount); try { Thread.sleep(1); }catch(InterruptedException ex) { ex.printStackTrace(); } account.setBalance(account.getBalance()-drowAccount); System.out.println("\t余额为:"+account.getBalance()); }else { System.out.println(getName()+"取钱失败 余额不足"); } } //同步代码块结束 该线程释放同步锁 }}
测试类
package Tongbu;public class DrawTest { public static void main(String[] args) { //创建一个账户 Account acct=new Account("12345",1000); //模拟多个线程对同一账户取钱 new DrawThread("甲", acct, 800).start(); new DrawThread("乙", acct, 800).start(); new DrawThread("丙", acct, 200).start(); }}
阅读全文
0 0
- 多线程-线程同步问题
- 多线程与线程同步问题
- Java多线程-线程同步问题
- 多线程中线程同步问题
- java-多线程-线程同步问题
- 多线程之线程同步问题
- Java多线程编程— 线程同步问题
- java多线程——线程同步问题
- PV 线程同步和多线程问题
- Linux 多线程编程----线程见同步问题
- java多线程之线程同步问题
- java多线程之线程同步问题
- MFC 线程创建、多线程、及多线程间的同步问题
- 线程同步问题,线程上锁---多线程“卖票”实例
- .net多线程,线程异步,线程同步,并发问题---1---ShinePans
- 多线程-线程同步
- 多线程 线程同步
- Linux多线程,线程同步
- 浙江高考作文题是VR,这是我的回答
- Java 打印质数 goto思想应用
- 简单的数论小知识
- python数据类型--列表
- Codeforces Round #436 (Div. 2) E. Fire (有放入顺序有关的01背包)
- 多线程-线程同步问题
- python笔记
- java8之lambda表达式
- 基于TextRank的关键词、短语、摘要提取
- LeetCode刷题(24)
- CSS基础笔记
- 国外十大高校人工智能实验室及其代表性人物一览
- 1--springBoot的注解使用,aspectj注解的使用,配置类的使用
- 新京报整版广告!360葫芦里卖的什么药?