自学Java系列 笔记4 线程安全

线程安全

多线程应用程序同时访问共享对象时,由于线程间相互抢占CPU的控制权,造成一个线程夹在另一个线程的执行过程中运行,所以可能导致错误的执行结果。

 

问题:通过多线程解决小朋友分苹果的问题:一共有5个苹果,2个小朋友同时拿苹果,每次拿一个,拿完为止

 

线程安全的问题:

1. 理解并编写出线程不安全的实例代码

 

2. 使用 synchronized 代码块解决线程安全的问题:需要在 synchronized 代码块中参照共同的一个对象。

 

Synchronized 关键字:

为了防止共享对象在并发访问时出现错误,Java中提供了“synchronized”关键字。

synchronized关键字:确保共享对象在同一时刻只能被一个线程访问,这种处理机制称为线程同步线程互斥Java中的线程同步基于对象锁的概念

使用 synchronized 关键字:

1.修饰方法:

//定义同步方法

 public synchronized void methd(){

    //方法实现

 }

–   当一个线程访问对象的同步方法时,被访问对象就处于锁定状态,访问该方法的其他线程只能等待,对象中的其他同步方法也不能访问,但非同步方法则可以访问

 

重新修改小朋友分苹果的例子,将getApple方法改为同步方法

使用 ”synchronized” 关键字:修饰部分代码,如果只希望同步部分代码行,可以使用同步块,同步块的作用与同步方法一样,只是控制范围有所区别

 

//同步块

 synchronized(obj){

   //被同步的代码块

 }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值