39.线程同步

来源:互联网 发布:linux恢复删除的文件夹 编辑:程序博客网 时间:2024/05/20 20:21

1. 异步编程模型:t1线程执行t1的,t2线程执行t2的 ,谁也不等谁

同步编程模型:t1线程必须等t2线程执行结束后,t1线程才执行


2. 什么时候要同步

第一:必须是多线程环境

第二:多线程环境共享一个数据

第三:共享的数据涉及到修改操作


3.    为什么要引入线程同步?

为了数据安全尽管应用程序的使用率降低。(尽管线程同步机制使程序(等同)变成单线程)


4.取款实例

package 多线程模拟取款操作;public class T1 {public static void main(String[] args) {Account act = new Account("小马哥",5000.0);Thread t1 = new Thread(new Processor(act));Thread t2 = new Thread(new Processor(act));t1.start();t2.start();}}//取款线程class Processor implements Runnable{//账户Account act;//ConstructorProcessor(Account act){this.act = act;}public void run() {act.withdraw(1000.0);System.out.println("取款1000元成功,余额:"+act.getBalance());}}//账户class Account{String actno;double balance;Account(){}Account(String actno,double balance){this.actno = actno;this.balance = balance;}public void setActno() {this.actno = actno;}public String getActno() {return actno;}public void setBalance() {this.balance = balance;}public double getBalance(){return balance;}public void withdraw(double money) {synchronized(this) {double after = balance - money;//中断try {Thread.sleep(1000);}catch(Exception e) {};this.balance = after;}}}


原理:t1线程和t2线程

  t1线程执行到遇到synchronized关键字,就会去找this的对象锁

 找到this对象锁,则进入同步语句块中执行程序。当同步语句块。当同步语句块中的代码执行结束后,t1线程归还this的对象   在t1线程执行同步语句块的过程中,如果t2也过来执行以下代码,也遇到synchronized关键字,也去找this对象锁,但是该对象锁被t1 持有,只能在这等待this对象归还

原创粉丝点击