博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程间通信
阅读量:6828 次
发布时间:2019-06-26

本文共 888 字,大约阅读时间需要 2 分钟。

hot3.png

1、等待/通知机制

   wait()方法:是当前执行代码的进程进行等待,直到接到通知或被中断为止,wait()是object类的方法。

                   调用wait方法钱必须获得对象锁——只能在同步方法中调用wait()方法;

                   执行完wait方法之后线程释放,从wait返回前需要和其他线程竞争重新获得锁。

                   wait如果没有持有适当的锁,则会抛出IllegalMonitorStateException(RuntimeException)

                    在wait时,调用interrupt()方法会出现InterruptException异常。

                   wait(long),一定时间未被唤醒自动唤醒

  notify()方法: 用来通知可能在等待该对象的对象锁的其他线程

                       也需要在同步方法中调用——获得锁,如果未获得适当的锁也会抛错;

                       唤醒的线程是随机的,一次一个;

                       notify所在的同步代码块执行完了才会释放锁。

                       多个线程的时候,notify了 一个线程,其他线程只能等待再次notify或则notifyall;

                       notifyAll唤醒所有线程

    线程状态的切换:

                 100953_g9et_2464465.png

 

2、通过管道进行线程间通信

    字节流:PipeInputStream,PipeOutputStream

    字符流:PipeReader,PipeWriter

3、join()方法

    join()的作用就是等待线程对象的销毁

  join的作用是使主线程无限期阻塞,等子线程销毁之后在继续执行主线程之后的代码;

  join的原理是在内部使用wait等待,而synchronized关键是使用的对象监视器原理做同步

  join(long) 和sleep(long)的区别:join(long)释放锁,sleep(long)不释放锁

4、ThreadLocal

    每个线程绑定自己的值,解决了变量在不同线程间的隔离性

    initValue()设置默认值

   InheritableThreadLocal可以在子线程中取得父线程继承下来的值

 childValue() 改变继承的值

 

                   

转载于:https://my.oschina.net/u/2464465/blog/1825365

你可能感兴趣的文章
jacob打印word(.doc)或者excel(.xls) 【java实现】
查看>>
MapReduce算法例析
查看>>
meta 详解,html5 meta 标签日常设置(转)
查看>>
简单的三元运算符 购物车商品数量文本框
查看>>
linux软件操作
查看>>
Fedora27安装宝塔linux面板出现/usr/lib/rpm/redhat/redhat-hardened-cc1找不到的错误
查看>>
Qt如何设置应用ico图标
查看>>
openwrt-智能路由器hack技术(1)---"DNS劫持"
查看>>
单例模式
查看>>
根据webform页面大小的变化动态调整控件的大小
查看>>
673:Parentheses Balance
查看>>
RabbitMQ学习总结(5)——发布和订阅实例详解
查看>>
C#基础加强二:const和readonly深入研究
查看>>
类序列化
查看>>
ASP.NET 日志组件Smart.LogNet.DLL 引用即可写入日志及读取日志
查看>>
VS2013 密钥 – 所有版本(Visual Studio Ultimate,Premium,Professional,TFS)
查看>>
JavaScript中对象的比较
查看>>
网络爬虫基本练习
查看>>
课堂作业(String字符串类)
查看>>
verilog语法之memory存储器
查看>>