线程同步归纳总结
来源:互联网 发布:邮政小包软件 编辑:程序博客网 时间:2024/05/17 01:30
“多线程”在大型软件程序中有着很广泛的应用,其优点如下:
第一,将原来在一个大流程中实现的功能放到了多个小流程中,程序更加的简洁和易于阅读。
第二,将不同的功能放到不同的线程中,提高了程序的执行效率。
第三,“多线程”使得程序的模块化更强,有利于追踪程序执行过程和排查问题。
1:为什么要线程同步?
线程同步是为了防止多个线程访问一个数据对象时,对数据造成破坏。
线程的同步是保证多线程安全访问资源的一种手段。
2:同步和锁
Java中每一个对象都有一个内置锁。
当程序运行到synchronized同步代码块时,自动获得锁定对象的锁。
一个对象只有一个锁。所以,如果一个线程获得该锁,就没有其他线程可以获得锁,直到第一个线程释放锁。
这也意味着任何其他线程都不能进入synchronized方法或代码块,直到该锁被释放。
释放锁是指持锁线程退出了synchronized同步方法或代码块。
3:代码举例
Talk is cheap,Just show me the code!(代码举例说明)
示例需求:
某银行卡账号上有500元现金。一个人拿着存折去取钱,同时另一个人拿着卡去ATM上取钱,各自取钱400元。
要求取钱过程中不能出现资源竞争:比如400元被取出两次,银行卡的账目不能小于0。
class Bank { private int money = 500; // 取钱的方法,返回取钱的数目 //当一个线程去调用同步方法的时候,这个线程就获取了当前对象的锁。 //其他线程当调用同步方法的时候只能等待,因为无法获取对象的锁, //只有等第一个线程释放对象的锁方可进入 public synchronized int getMoney(int number) { synchronized (this) { if (number < 0) { return -1; } else if (money < 0) { return -2; } else if (number - money > 0) { return -3; } else { try { Thread.sleep(1000);// 模拟取钱的时间 } catch (InterruptedException e) { e.printStackTrace(); } money -= number; System.out.println("余额:" + money); } return number; } } }
class BankThread extends Thread { private Bank bank = null; public BankThread(Bank bank) { this.bank = bank; } @Override public void run() { System.out.println("取钱:" + bank.getMoney(400)); } }
主测试程序:
Bank bank=new Bank(); BankThread b1=new BankThread(bank); b1.start();//柜台取钱 BankThread b2=new BankThread(bank); b2.start();//ATM机上取钱
输出结果:
余额:100
取钱:400
取钱:-3
0 0
- 线程同步归纳总结
- 线程同步的总结
- java 线程同步总结
- Windows线程同步总结
- C# 线程同步总结
- 线程同步的总结
- JAVASE总结--线程同步
- 线程同步总结
- windows线程同步总结
- 线程同步工具包总结
- Java 线程同步总结
- Java 线程同步总结
- 归纳一下:C#线程同步的几种方法
- 归纳一下:C#线程同步的几种方法
- 归纳一下:C#线程同步的几种方法(转)
- 归纳一下:C#线程同步的几种方法
- 归纳一下:C#线程同步的几种方法
- 归纳一下:C#线程同步的几种方法
- 剑指Offer--039-平衡二叉树(判断一棵二叉树是否是平衡二叉树)[扩展附加题]
- StringBuffer的用法
- Glib学习(0) 第一课 g_printf的helloworld
- 如何使用 ATK-SIM900A 模块进行中英文的短信发送
- MVC、MVP和MVVM
- 线程同步归纳总结
- c++操作符new 与delete学习(2)
- valgrind的使用、原理
- C++ fstream中seekg()和seekp()的用法
- Activity
- Android sdk update
- ROS(indigo)机器人操作系统学习有趣丰富的Gazebo仿真示例evarobot
- DWR的简单应用
- 空间换时间 - 珠心算测验