Redian新闻
>
有人在Java/J2EE项目中用过多线程/concurrent吗?
avatar
有人在Java/J2EE项目中用过多线程/concurrent吗?# Programming - 葵花宝典
D*6
1
北京面签H1B,现在预约到几月几号了?如果想要五月中旬回国,飞机一落北京马上就
去大使馆面签,需要在美国这边什么时候开始打电话预约?谢谢指点!
avatar
l*t
2
还是不编,无导,全自演,自看
谁也不知道下一集是神马,但都盼着看下一集
楼下的,赶紧补充...
avatar
J*r
3
我以为我的人生跌倒谷底了
昨晚又被人欺负哭了一个晚上
结果今天起来电话一个不认识的心理医生:我2点要见老板,但是我上周都没有去工作
怎么办?
医生说:我不能帮你回答这个问题。因为我还没见过你,我2点前也没有空见你。
于是,我去了,什么都没有带,就写了一张小半页纸:老板,我上周什么都没有做,但
是我这周想开始做新的programming
老板今天心情很好,居然5分钟会面结束后说very good. 我顿时晕了,5分钟也算very
good? 老板笑笑不语。
过了两个小时,老板很开心的来找我,说你之前一个工作对另一个家伙的工作很有启发
。恩我们要重新系统的看一下她的project。
这么说,其实人生是无法预测的。有时候我工作到死,结果老板不满噫。有时候我没有
怎么工作,但是其他事情发生了,恩,就发生了。
我之前做那点work的时候真的没有想到,还能帮助到另一个人和我老板。
avatar
D*6
4
【 以下文字转载自 ChineseClassics 讨论区 】
发信人: Doha2006 (花猫), 信区: ChineseClassics
标 题: 南非之行,打打油,3
发信站: BBS 未名空间站 (Sun Sep 19 11:58:30 2010, 美东)
照片
avatar
s*y
5
在Java/J2EE(比如Struts2/Spring/Hibernate)实际项目中有用过多线程吗?比如
java.util.concurrent包?
都实现什么功能?用了那些API?
avatar
g*n
6
和你的情况类似,4月份回国,想落地就去签证。刚给使馆打了电话, 说是现在中信银
行的收据有效期到3月中旬为止,如果想3月中以后签,只能等到大使馆的新的收费办法
出来以后。也就是说你现在想交钱也不行,这样当然就无法预约了。

【在 D******6 的大作中提到】
: 北京面签H1B,现在预约到几月几号了?如果想要五月中旬回国,飞机一落北京马上就
: 去大使馆面签,需要在美国这边什么时候开始打电话预约?谢谢指点!

avatar
c*p
7
你把老三呕肥了?

★ 发自iPhone App: ChineseWeb - 中文网站浏览器

【在 l*t 的大作中提到】
: 还是不编,无导,全自演,自看
: 谁也不知道下一集是神马,但都盼着看下一集
: 楼下的,赶紧补充...

avatar
o*a
8
谁。。。谁敢欺负你?我去切他JJ,揪她头发
avatar
p*e
9
哇,还有企鹅!

【在 D******6 的大作中提到】
: 【 以下文字转载自 ChineseClassics 讨论区 】
: 发信人: Doha2006 (花猫), 信区: ChineseClassics
: 标 题: 南非之行,打打油,3
: 发信站: BBS 未名空间站 (Sun Sep 19 11:58:30 2010, 美东)
: 照片

avatar
d*i
10
好像传统的J2EE不鼓励(或者禁止)你用多线程,因为app server像weblogic,
glassfish等等都已经帮你take care了,你用了自己搞的多线程反而破坏了container
的完整性。参见以下:
http://stackoverflow.com/questions/533783/why-spawning-threads-
Spring是另外一回事,因为不需要运行在container里面,可以standalone的
application运行,所以按照一般的多线程也可以。
PS: 以上说法可能不一定正确,如有错误请好虫, wwzz等Java大牛指正

【在 s****y 的大作中提到】
: 在Java/J2EE(比如Struts2/Spring/Hibernate)实际项目中有用过多线程吗?比如
: java.util.concurrent包?
: 都实现什么功能?用了那些API?

avatar
b*e
11
嗯,笑看你方唱罢我登场

【在 l*t 的大作中提到】
: 还是不编,无导,全自演,自看
: 谁也不知道下一集是神马,但都盼着看下一集
: 楼下的,赶紧补充...

avatar
V*s
12
嗯,都很漂亮,羡慕ing

【在 D******6 的大作中提到】
: 【 以下文字转载自 ChineseClassics 讨论区 】
: 发信人: Doha2006 (花猫), 信区: ChineseClassics
: 标 题: 南非之行,打打油,3
: 发信站: BBS 未名空间站 (Sun Sep 19 11:58:30 2010, 美东)
: 照片

avatar
g*g
13
原则就是不要乱开线程,要用 config好的 threadpool, 要让 container管理这样
shutdown server的时候是可控的。spring也是个 container.
虽然不用管理 pool, 还是多线程,有没有问题在于有没有共享资源。比如一个 bean里
有个简单计数器,是一定会出问题的。

container

【在 d****i 的大作中提到】
: 好像传统的J2EE不鼓励(或者禁止)你用多线程,因为app server像weblogic,
: glassfish等等都已经帮你take care了,你用了自己搞的多线程反而破坏了container
: 的完整性。参见以下:
: http://stackoverflow.com/questions/533783/why-spawning-threads-
: Spring是另外一回事,因为不需要运行在container里面,可以standalone的
: application运行,所以按照一般的多线程也可以。
: PS: 以上说法可能不一定正确,如有错误请好虫, wwzz等Java大牛指正

avatar
l*t
14
哦,原来你们早得出了这个结论啦,老三是总导?

【在 c***p 的大作中提到】
: 你把老三呕肥了?
:
: ★ 发自iPhone App: ChineseWeb - 中文网站浏览器

avatar
w*t
15
啊,原本还以为只有南极有企鹅呢

【在 D******6 的大作中提到】
: 【 以下文字转载自 ChineseClassics 讨论区 】
: 发信人: Doha2006 (花猫), 信区: ChineseClassics
: 标 题: 南非之行,打打油,3
: 发信站: BBS 未名空间站 (Sun Sep 19 11:58:30 2010, 美东)
: 照片

avatar
s*y
16

你说的的threadpool指的是什么?

【在 g*****g 的大作中提到】
: 原则就是不要乱开线程,要用 config好的 threadpool, 要让 container管理这样
: shutdown server的时候是可控的。spring也是个 container.
: 虽然不用管理 pool, 还是多线程,有没有问题在于有没有共享资源。比如一个 bean里
: 有个简单计数器,是一定会出问题的。
:
: container

avatar
w*a
17
版上浓烈的文革气息,让人闻之胆寒。
不敢掐架的是弱者;敢于掐架的是勇者;不想掐架的是智者。
avatar
u*s
18
来张多哈跟小企鹅的合影吧

【在 D******6 的大作中提到】
: 【 以下文字转载自 ChineseClassics 讨论区 】
: 发信人: Doha2006 (花猫), 信区: ChineseClassics
: 标 题: 南非之行,打打油,3
: 发信站: BBS 未名空间站 (Sun Sep 19 11:58:30 2010, 美东)
: 照片

avatar
g*g
19
threadpool就是 threadpool, 通常是 ExecutorService的子类。

【在 s****y 的大作中提到】
:
: 你说的的threadpool指的是什么?

avatar
s*3
20
敢掐的勇者里再分掐赢了的壮士和掐输了的烈士

【在 w**********a 的大作中提到】
: 版上浓烈的文革气息,让人闻之胆寒。
: 不敢掐架的是弱者;敢于掐架的是勇者;不想掐架的是智者。

avatar
T*e
21
我用过Java的多线程,跟Spring/Hibernate一起用。当时从Java5开始做的,没有用到
很高级的功能,直接裸奔Thread。
我们有大概十台服务器,每台上有数量不等的CPU/Core。总的来说对于每个服务器上各
个JVM Instance上跑的数据处理线程数目的上限就是CPU/Core的数量,另外每个工作线
程配备一个监测线程,以保证死掉的工作线程能够及时被终止或者其他异常的报告。之
外有一两个线程负责工作调度、系统监测以及异常报告等。
刚开始设计实现时没啥经验,后来试图了解更新的concurrent包,但没想好怎么利用。
avatar
m*r
22
养个花种个菜都能吵架,真是吃饱了撑的。。。谁占了谁的水源?谁偷了谁的粪堆啊?
avatar
l*n
23
上WebSocket或者Streaming。另外可以上AKKA啊
avatar
l*6
24
说得在理,这儿的有些人小农意识很强。

【在 m*******r 的大作中提到】
: 养个花种个菜都能吵架,真是吃饱了撑的。。。谁占了谁的水源?谁偷了谁的粪堆啊?
avatar
g*g
25
You should use threadpool and built in JMX for monitoring.

【在 T*****e 的大作中提到】
: 我用过Java的多线程,跟Spring/Hibernate一起用。当时从Java5开始做的,没有用到
: 很高级的功能,直接裸奔Thread。
: 我们有大概十台服务器,每台上有数量不等的CPU/Core。总的来说对于每个服务器上各
: 个JVM Instance上跑的数据处理线程数目的上限就是CPU/Core的数量,另外每个工作线
: 程配备一个监测线程,以保证死掉的工作线程能够及时被终止或者其他异常的报告。之
: 外有一两个线程负责工作调度、系统监测以及异常报告等。
: 刚开始设计实现时没啥经验,后来试图了解更新的concurrent包,但没想好怎么利用。

avatar
c*f
26
只用过future + executor service + callable/runnable...
多线的traffic,netty用的比较多
avatar
k*g
27

首先所有底层的第三方代码要进行代码审查,看看有没有要修补,要上锁或加倍留意的
地方,例如mutable singleton,thread local data。其中的「锁」会用两种方式确保
正确运作而不锁死∶数据依赖和任务依赖。巩固代码後,下面的工作可分为三方面∶任
务包装,数据包装,界面包装。这包装和encapsulation不同,本质是换汤不换药,不
过是把代码结构稍为修改了。任务包装是把可执行的耗时任务分割为单元,细分为CPU
intensive和IO intensive,再分装为Callable。要确保每一个单元提交到Executor後
,能在任意thread成功执行。数据包装是把数据分类为Write once read many(WORM)或
是mutable。WORM会变成Futures。Mutable按需要可能改写成immutable pattern(类似
copy on modify)或用上述的依赖链使其单线程化。(即使单线程化,不相关的任务仍
可并列执行。)界面包装是把上述的改写用最简洁易用的方式表达,确保接口的组合性
(composability)。
经常会用到 Functor 的概念,就是某函数会返回一个object,这object包装了一些可
执行代码。
Actor model其实和explicit thread分别不大,甚至也保留了deadlock的可能性(如果
有两个或以上的Actor交换信息而且对输入数据的时序敏感)。一般来说会把Actor
model分解成task and data,然後把Actor model的输入输出换成queue。

【在 T*****e 的大作中提到】
: 我用过Java的多线程,跟Spring/Hibernate一起用。当时从Java5开始做的,没有用到
: 很高级的功能,直接裸奔Thread。
: 我们有大概十台服务器,每台上有数量不等的CPU/Core。总的来说对于每个服务器上各
: 个JVM Instance上跑的数据处理线程数目的上限就是CPU/Core的数量,另外每个工作线
: 程配备一个监测线程,以保证死掉的工作线程能够及时被终止或者其他异常的报告。之
: 外有一两个线程负责工作调度、系统监测以及异常报告等。
: 刚开始设计实现时没啥经验,后来试图了解更新的concurrent包,但没想好怎么利用。

avatar
w*z
28
我本人在tomcat 里用过一次ExecutorService. 有个request 进来,要update
multiple Cassandra row,
一般情况下,在servlet container 里不用自己threadpool, container 已经有了自
己的 service thread pool. 每个request 都分配一个service thread
后来tomcat 加了 nio
http://java.dzone.com/articles/understanding-tomcat-nio


【在 s****y 的大作中提到】
: 在Java/J2EE(比如Struts2/Spring/Hibernate)实际项目中有用过多线程吗?比如
: java.util.concurrent包?
: 都实现什么功能?用了那些API?

avatar
n*u
29

我有些native library产生的object,init比较慢,内存消耗也有点大。
让tomcat之类的自己管理thread的话,每个thread都要init一遍(慢),thread多的话
总内存消耗也会很厉害。
所以放个threadpool在那儿共享几个这样的object会比较好吧?

【在 w**z 的大作中提到】
: 我本人在tomcat 里用过一次ExecutorService. 有个request 进来,要update
: multiple Cassandra row,
: 一般情况下,在servlet container 里不用自己threadpool, container 已经有了自
: 己的 service thread pool. 每个request 都分配一个service thread
: 后来tomcat 加了 nio
: http://java.dzone.com/articles/understanding-tomcat-nio
:

avatar
w*z
30
为什么每个request 都要init object, sprint created object default is
singleton

【在 n*********u 的大作中提到】
:
: 我有些native library产生的object,init比较慢,内存消耗也有点大。
: 让tomcat之类的自己管理thread的话,每个thread都要init一遍(慢),thread多的话
: 总内存消耗也会很厉害。
: 所以放个threadpool在那儿共享几个这样的object会比较好吧?

avatar
g*g
31
That's called object pool. If your object is not thread safe, it's OK to
have an object pool. But you don't want to tie threads to it.

【在 n*********u 的大作中提到】
:
: 我有些native library产生的object,init比较慢,内存消耗也有点大。
: 让tomcat之类的自己管理thread的话,每个thread都要init一遍(慢),thread多的话
: 总内存消耗也会很厉害。
: 所以放个threadpool在那儿共享几个这样的object会比较好吧?

avatar
l*n
32
可以用Future。可以把任务放在一个queue里,然后任务线程从queue里取任务执行。结
果放在另一个queue里。如果queue空了,最后用Thread.join() in your main thread
to wait in a blocking fashion for each Thread to complete。
avatar
g*g
33
Threads in threadpool typically don't die, instead of using Thread.join, you
should simple block on Fugure.get

thread

【在 l**********n 的大作中提到】
: 可以用Future。可以把任务放在一个queue里,然后任务线程从queue里取任务执行。结
: 果放在另一个queue里。如果queue空了,最后用Thread.join() in your main thread
: to wait in a blocking fashion for each Thread to complete。

avatar
h*r
34
block on Fugure.get, 好像容易造成thread leak,尤其是有I/O的情况.
经常是jstack发现thread数目在增加,原因是有一些thread在死等i/o,
加上timeout也不是都能解决死等i/o的问题。
这种情况下,executor service(也即thread pool)没有avaialble
thread可用,只好为新request开新的thread,老的thread就继续死等
(或者是有某种exception没有handle而死了)leak掉了。

you

【在 g*****g 的大作中提到】
: Threads in threadpool typically don't die, instead of using Thread.join, you
: should simple block on Fugure.get
:
: thread

avatar
g*g
35
I don't think so. Blocking on future get is not polling.

【在 h****r 的大作中提到】
: block on Fugure.get, 好像容易造成thread leak,尤其是有I/O的情况.
: 经常是jstack发现thread数目在增加,原因是有一些thread在死等i/o,
: 加上timeout也不是都能解决死等i/o的问题。
: 这种情况下,executor service(也即thread pool)没有avaialble
: thread可用,只好为新request开新的thread,老的thread就继续死等
: (或者是有某种exception没有handle而死了)leak掉了。
:
: you

avatar
w*z
36
it depends on which kind if thread pool the executor service us using.
whether the thread finishes the task has nothing to do with future.get.

【在 h****r 的大作中提到】
: block on Fugure.get, 好像容易造成thread leak,尤其是有I/O的情况.
: 经常是jstack发现thread数目在增加,原因是有一些thread在死等i/o,
: 加上timeout也不是都能解决死等i/o的问题。
: 这种情况下,executor service(也即thread pool)没有avaialble
: thread可用,只好为新request开新的thread,老的thread就继续死等
: (或者是有某种exception没有handle而死了)leak掉了。
:
: you

avatar
h*r
37
这个跟polling确实没有关系。既然blocking了,也无所谓polling了.
不过这个blocking确实是thread死掉的直接或者间接原因。

【在 g*****g 的大作中提到】
: I don't think so. Blocking on future get is not polling.
avatar
h*r
38

这句话有点武断了。

【在 w**z 的大作中提到】
: it depends on which kind if thread pool the executor service us using.
: whether the thread finishes the task has nothing to do with future.get.

avatar
g*g
39
如果你的 task不返回,那当然是个问题。但 block在 future上不是问题的根源。

【在 h****r 的大作中提到】
: 这个跟polling确实没有关系。既然blocking了,也无所谓polling了.
: 不过这个blocking确实是thread死掉的直接或者间接原因。

avatar
w*z
40
具体点?有了future get, thread 就stuck, 去掉 future get, 就好了?It does
not make sense.

【在 h****r 的大作中提到】
:
: 这句话有点武断了。

avatar
g*g
41
所有的外部IO都必须有timeout,Java缺省是无timeout block在 IO上,也许他碰到的
是这
样的问题。

【在 w**z 的大作中提到】
: 具体点?有了future get, thread 就stuck, 去掉 future get, 就好了?It does
: not make sense.

avatar
w*z
42
那关future get 啥事?

【在 g*****g 的大作中提到】
: 所有的外部IO都必须有timeout,Java缺省是无timeout block在 IO上,也许他碰到的
: 是这
: 样的问题。

avatar
T*e
43
哈哈,当时用多线程已经是头一次了,很多方面都没考虑到/对,还是走了一些弯路的
。threadpool当时没用好像是因为没有看到线程配对(一个工作一个监测控制)的例子
,自己不知道如何着手。
JMX没有接触过,到现在也只是听说过。看来有空可以看看。
当时考虑过用Message Queue来做调度,不过没找到persistency和recovery方面的资料
(主要是这个也是似懂非懂),后来直接把调度做成数据库的更新与查询了事。
后来学scala的actor,觉得akka的actor就挺好挺简单,不过重写是不可能了。

【在 g*****g 的大作中提到】
: You should use threadpool and built in JMX for monitoring.
avatar
z*e
44
rxjava出来了
用subscribe了
就不需要block了

【在 h****r 的大作中提到】
: block on Fugure.get, 好像容易造成thread leak,尤其是有I/O的情况.
: 经常是jstack发现thread数目在增加,原因是有一些thread在死等i/o,
: 加上timeout也不是都能解决死等i/o的问题。
: 这种情况下,executor service(也即thread pool)没有avaialble
: thread可用,只好为新request开新的thread,老的thread就继续死等
: (或者是有某种exception没有handle而死了)leak掉了。
:
: you

avatar
z*e
45
看看vertx和rxjava
你会觉得更简单
hoho

【在 T*****e 的大作中提到】
: 哈哈,当时用多线程已经是头一次了,很多方面都没考虑到/对,还是走了一些弯路的
: 。threadpool当时没用好像是因为没有看到线程配对(一个工作一个监测控制)的例子
: ,自己不知道如何着手。
: JMX没有接触过,到现在也只是听说过。看来有空可以看看。
: 当时考虑过用Message Queue来做调度,不过没找到persistency和recovery方面的资料
: (主要是这个也是似懂非懂),后来直接把调度做成数据库的更新与查询了事。
: 后来学scala的actor,觉得akka的actor就挺好挺简单,不过重写是不可能了。

avatar
l*n
46
rxjava是基于netty的吗?

【在 z****e 的大作中提到】
: rxjava出来了
: 用subscribe了
: 就不需要block了

avatar
z*e
47
好像是
有一个子项目叫做rxnetty好像
先让netty实现异步,然后再基于这个造出rxjava

【在 l**********n 的大作中提到】
: rxjava是基于netty的吗?
avatar
l*n
48
rxjava是netflix的项目。

【在 z****e 的大作中提到】
: 好像是
: 有一个子项目叫做rxnetty好像
: 先让netty实现异步,然后再基于这个造出rxjava

avatar
z*e
49
是啊
主要作者是古德霸的同僚
这种跨公司协作的开源项目在java里面不是到处都是么?
vert.x是rh的,netty是那个韩国人做的

【在 l**********n 的大作中提到】
: rxjava是netflix的项目。
avatar
d*r
50
"""
Actor model其实和explicit thread分别不大,甚至也保留了deadlock的可能性(如果
有两个或以上的Actor交换信息而且对输入数据的时序敏感)。一般来说会把Actor
model分解成task and data,然後把Actor model的输入输出换成queue。
"""
我也是觉得其实各种隐式的lock和race condition其实是无法避免的。
Actor 这些东西只是强迫大家多做解耦,然后少产生lock而已,有些lock还是不能避免
地用另外一种形式实现了.

CPU

【在 k**********g 的大作中提到】
:
: 首先所有底层的第三方代码要进行代码审查,看看有没有要修补,要上锁或加倍留意的
: 地方,例如mutable singleton,thread local data。其中的「锁」会用两种方式确保
: 正确运作而不锁死∶数据依赖和任务依赖。巩固代码後,下面的工作可分为三方面∶任
: 务包装,数据包装,界面包装。这包装和encapsulation不同,本质是换汤不换药,不
: 过是把代码结构稍为修改了。任务包装是把可执行的耗时任务分割为单元,细分为CPU
: intensive和IO intensive,再分装为Callable。要确保每一个单元提交到Executor後
: ,能在任意thread成功执行。数据包装是把数据分类为Write once read many(WORM)或
: 是mutable。WORM会变成Futures。Mutable按需要可能改写成immutable pattern(类似
: copy on modify)或用上述的依赖链使其单线程化。(即使单线程化,不相关的任务仍

avatar
z*e
51
应该不对

【在 d*******r 的大作中提到】
: """
: Actor model其实和explicit thread分别不大,甚至也保留了deadlock的可能性(如果
: 有两个或以上的Actor交换信息而且对输入数据的时序敏感)。一般来说会把Actor
: model分解成task and data,然後把Actor model的输入输出换成queue。
: """
: 我也是觉得其实各种隐式的lock和race condition其实是无法避免的。
: Actor 这些东西只是强迫大家多做解耦,然后少产生lock而已,有些lock还是不能避免
: 地用另外一种形式实现了.
:
: CPU

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。