鱼C论坛

 找回密码
 立即注册
查看: 2760|回复: 0

[学习笔记] Java多线程08

[复制链接]
发表于 2017-6-23 10:28:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一生产与一消费:操作栈
P1生产一个,C1消费一个  容器size的值不会大于1

一生产与多消费:操作栈
注意判断状态的语句 将if改成while 则可以运行
                          但是因为多消费者,用notify()通知 会出现假死现象
                          改成notifyAll();则不会出现假死现象

多生产与多消费:操作栈

通过管道进行线程间通信:字节流
管道流pipeStream  是一种特殊的流,用于在不同线程间直接传送数据
                            一个线程发送数据到输出管道,另一个线程从输入管道中读数据
JDK中提供了四个类使进程间可以进行通信
PipedInputStreadm   PipedOutputStream
PipedReader  PipedWriter

PipedInputStream和PipedOutputStream的实现原理类似于“生产者-消费者”,
PipedInputStream是消费者,该类中有有一个buffer字节数组,默认为1024,作为缓冲区,存放“生产者”生产出来的东西,
还有两个变量int,out  in记录“生产者”生产了多少,out记录“消费者”消费了多少,当in为-1时表示消费完了,in==out时表示生产满了
有int read(byte[] b, int off, int len)将最多len个数据字节从此管道输入流读入byte数组
也有clsoe()

PipedOutputStream 是生产者,有write(byte a)将指定a写入传送的输出流,
                                 close()关闭此管道输出流并释放与此流有关的所有系统资源

实战:等待/通知交叉备份

方法join的使用
作用:等待线程对象销毁  很多情况下,主线程创建并启动子线程,通常主线程比子线程更早结束 如果主线程想等待子线程执行完毕后再结束,使用join方法
属于Thread类的方法  
join() 等待该线程终止
join(long millis)  等待millis时间终止线程
join(long millis, int nanos) 等待 millis毫秒+nanos纳秒 时间终止
例如:t.join()  
t.join()方法阻塞调用此方法的线程,直到线程t完成,此线程在继续;通常用于在main()主线程内,等待其他线程完成再继续main()主线程

Join方法实现是通过wait(小提示:Object 提供的方法)。 当main线程调用t.join时候,main线程会获得线程对象t的锁(wait 意味着拿到该对象的锁),调用该对象的wait(等待时间),直到该对象唤醒main线程 ,比如退出后。  这就意味着main 线程调用t.join时,必须能够拿到线程t对象的锁。

join方法是synchronized,所以需要获取Thread的对象锁才能进入,只有获得了锁才能调用wait放弃对锁的独占并等待再次获取锁。

评分

参与人数 1鱼币 +3 收起 理由
小甲鱼 + 3 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 15:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表