Java学习笔记:线程安全问题

1、多线程的实现:
(1)继承Thread类:主函数中通过创建多个SubThread类对象,并调用其start()方法。SubThread类对象中属性数据独占。

(2)实现Runnable接口:主函数中创建一个Runnable接口实现类对象,同时创建多个Thread类对象,并传入接口对象,通过各Thread对象的start()方法进行多线程操作。 Runnable接口实现类对象中属性数据本身已经共享。
两种方法均重写run()方法【注意:不是重载*】来完成多线程需要完成的工作。

2、线程安全:
(1)同步代码块:
将操作共享资源的代码块通过synchronized (lock){操作共享资源的代码块}进行同步;其中lock是锁(也即同步监视器),由一个类的对象充当(所有线程必须公用该锁,所以在实现Runnable方式中可以直接使用this,或者接口中定义的一个任意属性对象;但是在继承方式中,必须要慎重使用this,常通过使用定义成static的全局属性对象充当锁)

(2)同步方法:
将 操作共享资源的代码块 定义为一个synchronized方法,在run()方法中调用该synchronized的方法,其默认的锁是this,对于实现实现Runnable接口的方式,可以保证线程安全;但是对于继承实现的,不能够保证线程安全

3、线程通信
wait()、 notify() 、notifyAll()方法,必须在synchronized的方法或者synchronized代码块中,当前线程获取了锁,立即通过notify()或notifyAll()唤醒其他的等待线程、然后当前线程执行完同步代码块,通过wait()方法进入等待状态,释放当前占用的锁;其他线程由于之前已经被唤醒,可以抢占锁执行同步代码块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值