java线程安全实现代码,Java线程安全问题代码的实现

d8fdaec576577fc08e15f4fe07d33d22.png

第一个解决线程安全问题的方法: 使用同步代码块

格式:

已同步(锁定对象){

可能存程安全问题的代码(访问共享数据的代码)

}

a962dec3bb9a98dd250e910284601301.png

注意: 代码块中的锁对象可以是任何对象线程安全问题代码,但是必须确保多个线程使用同一对象

锁定对象的作用是锁定同步代码块,并且一次只能在同步代码块中执行一个线程

packagecom.fgy.demo02;/*** 实现卖票案例*/

public class RunnableImpl implementsRunnable {private int ticket = 100;

Object obj= newObject();

@Overridepublic voidrun() {while (true) {(obj) {if (ticket > 0) {try{

Thread.sleep(100);

}catch(InterruptedException e) {

e.printStackTrace();

}

System.out.println(Thread.currentThread().getName()+ "正在买第" + ticket + "张票");

ticket--;

}

}

}

}

}

packagecom.fgy.demo02;public classDemo01Ticket {public static voidmain(String[] args) {

RunnableImpl run= newRunnableImpl();newThread(run).start();newThread(run).start();newThread(run).start();

}

}

3ba48c4e7dd1ac20bfc39e2965c1a230.png

0d3d86c95ea84ecdc040eec6c6b3cc90.png

解决线程安全问题的第二种方案: 使用同步方法

使用步骤:

1. 提取访问共享数据的代码并将其放在方法中

2. 将同步修饰符添加到方法中

格式:

3eb2a8ef586a7c515916709910f09520.png

修饰符同步的返回值类型方法名称(...){

可能存程安全问题的代码(访问共享数据的代码)

}

同步方法的锁定对象是:

静态同步方法的锁对象不能是this线程安全问题代码,因为它是在创建对象之后创建的,并且静态方法优先于该对象

76ccc841bc82f05271aaf194656a7781.png

静态方法的锁对象是此类的类文件对象

packagecom.fgy.demo03;/*** 实现卖票案例*/

public class RunnableImpl implementsRunnable {private int ticket = 100;

@Overridepublic voidrun() {while (true) {

payTicket();

}

}public synchronized voidpayTicket() {if (ticket > 0) {try{

Thread.sleep(100);

}catch(InterruptedException e) {

e.printStackTrace();

}

System.out.println(Thread.currentThread().getName()+ "正在买第" + ticket + "张票");

ticket--;

}

}

}

第三个解决线程安全问题的方法: 使用锁锁

使用步骤:

1. 在成员的位置创建一个ReenterantLock对象

2. 在可能存在安全问题的代码之前,在Lock接口中调用方法lock()以获得锁.

3. 在可能存在安全问题的代码后,在Lock接口中调用方法unlock()释放锁.

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-190872-1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值