Java--线程之间的通信 线程间数据共享

在没有使用线程通信时,多线程共同操作同一份数据会造成对同一共享变量的争夺,所以多线程之间的通信可以避免对统一共享变量的争夺。多个线程在处理同一资源并且任务不同时,需要线程通信来帮助解决线程之间对同一变量的操组合使用。

等待唤醒机制(wait()/notify())

wait()

线程在调用wait方法时,会释放它对锁的拥有权,然后等待另外的线程(方式是notify或者notifyall)来通知他,这样重新获得锁的拥有权并且恢复执行。

要确保调用wait方法时,线程拥有该对象的对象级别锁,即wait方法的调用必须放在synchronized方法或者synchronized块中(同步方法或者同步块中),否则抛出IllegalMonitorStateException。

notify()/notifyall()

唤醒一个等待当前对象的锁的线程/唤醒在此对象监视器上等待的所有线程。

当多个线程在等待时,随意选择一个被唤醒,notify()方法应该被拥有对象的锁的线程调用。

代码可参考:https://www.cnblogs.com/Wenxu/p/7979023.html

 

join()方法

join方法应用举例:很多情况下主线程创建并启用子线程,如果子线程进行大量的耗时运算那么主线程就比子线程结束的早。如果主线程想等子线程运行的结果之后结束,那么就要使用join()方法了。join 的作用是等待线程对象的销毁。

package Java.Thread;

// 线程通信中的join方法
public class join extends Thread{
	public void run() {
		try {
			int secVal = (int)(Math.random()*1000);
			System.out.println(secVal);
			Thread.sleep(secVal);
		} catch(InterruptedException e) {
			e.printStackTrace();
		}
	}
	public static void main(String args[]) throws InterruptedException {
		Thread T1 = new join();
		T1.start();
	    T1.join();
		System.out.println("如果我的前方使用了join()那么我就会最后运性啦~~~");
	}
}

 

 

线程间数据共享

参考https://www.cnblogs.com/xujishou/p/6640677.html

对于每个线程执行相同的代码时,可以使用同一个Runnable对象

对于每个线程执行不同的代码时,需要使用不同的Runnable对象

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值