62,628
社区成员
发帖
与我相关
我的任务
分享
其实就是生产者消费者问题的例子程序,在生产者线程里有两句分别是调用篮子的put方法(往篮子里放入馒头i)和在命令行输出“生产了馒头i”,如果这两句之间被消费者线程打断(消费者线程会用take方法从篮子里拿走馒头i然后输出“吃掉了馒头i”),命令行上就会先看到“吃掉了馒头i”后看到“生产了馒头i”。所以不想生产者线程里的那两句被打断的话,该怎么写?[/quote]
你这个问题挺有意思的,我想了一会感觉还是用CountDownLatch比较好,虽然你说不要阻塞效果,可是生产者和消费者模式本来就会有阻塞呀。
其实就是生产者消费者问题的例子程序,在生产者线程里有两句分别是调用篮子的put方法(往篮子里放入馒头i)和在命令行输出“生产了馒头i”,如果这两句之间被消费者线程打断(消费者线程会用take方法从篮子里拿走馒头i然后输出“吃掉了馒头i”),命令行上就会先看到“吃掉了馒头i”后看到“生产了馒头i”。所以不想生产者线程里的那两句被打断的话,该怎么写?[/quote]
2种方法,
第一种加上同步,synchronized,整个方法,还是一段代码,自己定
第二种就是把这两句代码用reentrantlock包围,效率比synchronized高
另外CountDownLatch是等待到达一定的数量,再一起执行,不符合需求。
其实就是生产者消费者问题的例子程序,在生产者线程里有两句分别是调用篮子的put方法(往篮子里放入馒头i)和在命令行输出“生产了馒头i”,如果这两句之间被消费者线程打断(消费者线程会用take方法从篮子里拿走馒头i然后输出“吃掉了馒头i”),命令行上就会先看到“吃掉了馒头i”后看到“生产了馒头i”。所以不想生产者线程里的那两句被打断的话,该怎么写?[/quote]
2种方法,
第一种加上同步,synchronized,整个方法,还是一段代码,自己定
第二种就是把这两句代码用reentrantlock包围,效率比synchronized高
另外CountDownLatch是等待到达一定的数量,再一起执行,不符合需求。[/quote]
生产者和消费者是两个线程类,如果我在生产者线程类里面用了synchronized(this){这两句话},只能让其他生产者线程不会进来打断,一个消费者线程还是能进来的吧[/quote]
生产者/消费者可以参考BlockingQueue实现
其实就是生产者消费者问题的例子程序,在生产者线程里有两句分别是调用篮子的put方法(往篮子里放入馒头i)和在命令行输出“生产了馒头i”,如果这两句之间被消费者线程打断(消费者线程会用take方法从篮子里拿走馒头i然后输出“吃掉了馒头i”),命令行上就会先看到“吃掉了馒头i”后看到“生产了馒头i”。所以不想生产者线程里的那两句被打断的话,该怎么写?[/quote]
2种方法,
第一种加上同步,synchronized,整个方法,还是一段代码,自己定
第二种就是把这两句代码用reentrantlock包围,效率比synchronized高
另外CountDownLatch是等待到达一定的数量,再一起执行,不符合需求。[/quote]
生产者和消费者是两个线程类,如果我在生产者线程类里面用了synchronized(this){这两句话},只能让其他生产者线程不会进来打断,一个消费者线程还是能进来的吧
其实就是生产者消费者问题的例子程序,在生产者线程里有两句分别是调用篮子的put方法(往篮子里放入馒头i)和在命令行输出“生产了馒头i”,如果这两句之间被消费者线程打断(消费者线程会用take方法从篮子里拿走馒头i然后输出“吃掉了馒头i”),命令行上就会先看到“吃掉了馒头i”后看到“生产了馒头i”。所以不想生产者线程里的那两句被打断的话,该怎么写?