Java进阶 ——— Java多线程(三)之多线程同步问题

引言

接上一篇,Java进阶 ——— Java多线程(二)之如何开启多线程
介绍了Java多线程的开启方法,但是多线程运行的安全问题,将是本篇的重点

延伸阅读,Java多线程系列文章

Java进阶 ——— Java多线程(一)之进程和线程
Java进阶 ——— Java多线程(二)之如何开启多线程
Java进阶 ——— Java多线程(三)之多线程同步问题

在第一篇文章中,提到要实现多线程安全,就要实现线程同步,那么线程同步有哪些方法呢?

介绍线程同步之前,先大概了解一下多线程的原理。

线程的执行是CPU随机调度的,比如我们开启N个线程,这N个线程并不是同时执行的,而是CPU快速的在这N个线程之间切换执行,由于切换速度极快使我们感觉同时执行罢了。发生上面问题的本质就是CPU对线程执行的随机调度,比如A线程此时正在打印信息还没打印完毕此时CPU切换到B线程执行了,B线程执行完了又切换回A线程执行就会导致第一篇文章中打印错乱问题。

线程同步问题往往发生在多个线程调用同一方法或者操作同一变量,但是我们要知道其本质就是CPU对线程的随机调度,CPU无法保证一个线程执行完其逻辑才去调用另一个线程执行。

线程同步

所以解决线程同步的思路就是:保证一个线程在执行方法的时候如果没执行完那么另一个线程不能执行此方法,换句话说就是只能等待别的线程执行完毕才能执行,确保数据在任何时刻只有一个线程可以操作,保证数据完整性

为了解决线程同步问题,引入的概念

synchronized

synchronized同步有两种方式,同步代码块和同步方法

synchronized 同步方法

在方法上加上synchronized关键字,实际上锁的是this,即当前类对象,
如下列代码,例如外部要调用run方法,则需要创建ThreadRunnable对象实例,此时添加在run方法上的锁,实际是对实例对象加锁。

class  ThreadRunnable implements Runnable {
		@Override
		public synchronized void run() {
				age++;
				System.out.println(Thread.currentThread().getName() + "----" + age);
		}
	}
</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值