|
r******r 发帖数: 700 | 2 谢谢。
ThreadLocal 相对于 synchronized, 好像用得比较少,需要研究。
为什么 JAVA EE 里面,不用怎么考虑多线程的问题?
另外, 我觉得 Java 程序员,应该有至少一半以上,是写 core java 程序的吧?
每一个具体应用,跟 EE 都关系不大。 |
|
c*m 发帖数: 836 | 3
JEE不过是个platform/framework/tools set,本质上跟spring,hibernate, struts没
啥不同,只不过SUN把这套东西合在一起又搞了个标准,而且前中后端都涵盖了,算是
个成套产品。
不管用啥,你日常编程不还是要用core java。就算有些东西比如多线程在JEE的时候大
多有container帮你完成,你自己还是得搞清楚,尤其是哪些是thread safe的,哪些不
是,不然这活没法干了。 |
|
|
n******1 发帖数: 3756 | 5 一直想学多线程,但是缺少任务驱动
可惜你的程序不能分享出来 |
|
r******r 发帖数: 700 | 6 多线程就是一个机制,包括对一些数据结构的选择和利用,它本身并不增加很多代码。
比如,你可以练习一下我上面遇到的其中一个问题:
* Given an ArrayList to store 100000 integers from 1 ... 100000.In
a single threaded program, you will be able to easily output in the order of
the array list.
Now change it to a 10 thread program, how to achieve the same effect?
|
|
r******r 发帖数: 700 | 7 刚 google 了一下,这个用的广泛吗?
我们公司 backend 代码中涉及到多线程的,都是直接使用 Java 本身提供的支持。
It's good to know this AKKA though. |
|
z*******3 发帖数: 13709 | 8 一旦会出现某一类型的任务不能在短时间内完成
就需要上多线程
楼主的这种系统应该考虑用hadoop |
|
T*U 发帖数: 22634 | 9 fortran并行语言都出来二十多年了,怎么java还在玩多线程 |
|
r******r 发帖数: 700 | 10 我当时研究过 ArrayBlockingQueue,好像不适用。回头我再好好看看吧。
也觉得弄一个 synchronized 的 DataStore 不好,应该有现成的 class 可以利用。主
要要求就是能确保多线程下可以从一个结构里有序获得数据,而无需修改。 |
|
x****o 发帖数: 29677 | 11 有一个类,传入KEY,处理从数据库返回一组对应KEY的数据,然后返回这组数据
现在多线程访问,用哪个数据结构来存储这组(KEY,OBJECT)数据,THREAD SAFE同时保证
这个数据结构里存储的是LRU,SIZE不会超标 |
|
w****n 发帖数: 127 | 12 线程池比较大, corePoolSize 256, maximum 512.
发现concurrent request只有20几个的时候,系统自动生成了50~60个threads. 其中30
多个是pure idle thread. Is it normal or something wrong? 大牛帮忙指点一下。 |
|
p*****2 发帖数: 21240 | 13
听说现在很少会用java的多线程了,都是用actor,gochannel这些东西,最不济也还有
STM呢。 |
|
p*****2 发帖数: 21240 | 14
我觉得要先学习才能写有用的代码吧?也就是说要学习实用的技术,而不是Java多线程
现在很少用到的。 |
|
p*****3 发帖数: 488 | 15
还是有点用的,这两周尽整java多线程了,一个message queue 的polling,routing。
一个monitoring程序。 |
|
p*****3 发帖数: 488 | 16
新改写的小service.
java有哪些framework呢,感觉java的executionService那套就很好用了。其实java的
multithread已经感觉比c++,c的那些好用太多了。
特别复杂的比如condition variable那套东西如果有封装好的倒是蛮方便。不过大部分
情况感觉简单的多线程也犯不着用其他什么framework吧 |
|
b***i 发帖数: 3043 | 17 多线程很简单啊,不就是semaphore什么吗? |
|
p*****2 发帖数: 21240 | 18
其实说多线程有点不是很确切,现在主要是concurrency, 这块趋势是event-driven和
async, Java支持的就不好了。 |
|
m******t 发帖数: 635 | 19 我C#写过一般规模的async + multithreading的service,Java没有相关经验,最近打
算把这个service用Clojure重写一遍,也在考虑相关的思路,打算尝试下Core.async,
多线程方面打算学prismatic,直接用java.util.concurrent或者简单包装下。
这个是Prismatic他们的一篇博客,讲他们用的技术:
http://blog.getprismatic.com/blog/2012/4/5/software-engineering
相关部分摘要:
While we make heavy use of the core of Clojure, we don't use its concurrency
primitives (atoms, refs, STM, etc.) because a function like pmap doesn't
have enough fine grained control for our needs. We opt instead to build our
own concurrency ... 阅读全帖 |
|
z****e 发帖数: 54598 | 20 一个双核cpu如果不多线程岂不是很浪费?
多core多cpu的server并不少见 |
|
z****e 发帖数: 54598 | 21 只要避开并发操作,都不难
实际上单线程和异步也是用来规避并发用的 |
|
b***i 发帖数: 3043 | 22 这不是多线程实现的基本注意事项之一吗。解决方案有按顺序锁的,还有如果可以锁就
锁,不能就不锁的方法,再不行就看log。多调试。锁啊锁就习惯了。 |
|
|
|
z****e 发帖数: 54598 | 25 是,但是还是比较麻烦,自己实现多线程往往会有这种问题 |
|
T*********g 发帖数: 496 | 26 呵呵 他是不太行。 我转的目的是为了回答楼主的问题。多线程在工作中还是需要的。 |
|
|
b****u 发帖数: 1130 | 28 是个面试题。问一个账号,两个线程,一个+50 dollar, 一个加100 dollar.
如何保证在数据库上的结果是正确的。
我理解是用CAS的概念去解决这个问题。但对方要我写相关的SQL 语句, 并且详细解释
low-level级的操作。(e.g. Update BankAccount set balance=150 where...)
这应该是一个常见的问题。我对数据库的transaction了解很少。想请教大家,最好给
一点相关链接。 |
|
Y**G 发帖数: 1089 | 29 2里面,阻塞的是当前线程,后面四个AddTask根本没加进去。 |
|
D***0 发帖数: 138 | 30 操作比较简单,就是有个cache,当cache miss时从数据库取值,同时更新cache。这里
的key是由两部分组成的,一个int和一个interface,函数输入是这两个。问题是在多
线程下如何synchronize。 我想是用concurrentHashMap当cache
Type是一个interface
一开始想用下面这个Key来做map的key,但是后来觉得不对,这也是想请教的一个地方
class Key {
public int a;
public Type t;
public Key(int a, Type t){...}
public int hashCode() {...}
public boolean equals(Key k) {... }
}
List f(int a, Type t) {
//这里如何synchronize
//我想用a和t组成一个string,然后用string来当key,然后synchronize在这个
string上
StringBuilder sb = new StringBu... 阅读全帖 |
|
d****f 发帖数: 313 | 31 工作中牵涉到一个稍微复杂一点的线程同步问题,问题描述如下:
有两个thread:t1和t2
1、t1做N个时间步,t2做一个时间步(都是差分时间步),换句话说每个t2和N个t1同步
2、同步时,t1和t2要交换一下数据,t1先传1个链表tL1给t2,t2用这个tL1算两个链表
值(DataProcess),tL2a,tL2b,一个要回传给t1(tL2a,之后t1的N步都要用到这个tL2a
),另一个tL2b是t2下一步自己计算要用到的,这个过程是串行(原来并行的强制串行
).
3、交换完数据,t1和t2各自完成自己时间步计算,这个过程中t1做一个积分(N步),
t2解一个方程,无论哪个先完成,都需要等到双方都完成了,才能开始下一轮的计算(
也就是回到2),这个过程是并行的.
我贴了一个简单的框架,只是保证t1做一步,t2做一步,因为刚开始接触并行内容,所
以请各位大牛指点一下,这个每轮先串行后并行的过程如何实现,比如是不是需要两个
mutex,两个condition variable,等等,希望我已经描述清楚了, 谢谢!稍微有点提示也非常欢迎!
#include
# |
|
d****f 发帖数: 313 | 32
只有锁同一个mutex,才有互斥的可能啊,锁了两个mutex就毫无意义了
一次的变量传递吧。
t1_ready=1表示t1的工作做完了,做完之后要用该标志量,解锁t2线程,如果不用标志量,
可能导致condion signal丢失的 |
|
l******9 发帖数: 579 | 33 如何确保多线程程序在 multicore server 上确实使用了 所有的 core
to do computing in parallel physically (not logically)
I have a multicore server, which has 24 CPU, each CPU has 6 cores.
It is Intel xzeon X5650 2.67GHz
cpu cores : 6 (support 6 threads)
cpu MHz : 1596.000
totally, I have 24 * 6 = 144 cores.
I designed a multithreaded C++ program with boost/thread.
How to make sure that my program is run by all 144 cores ?
Any help is really appreciated.
thanks |
|
|
f******e 发帖数: 106 | 35 拿来准备interview,windows平台。
谢谢。
不晓得这种interview要求怎么answer。我的理解的话,线程无非是在thread里面先
lock再unlock,中间可能加点别的来wakeup云云。socket反正还不是往一个东西里面
write,另外一个read...... |
|
l*******9 发帖数: 177 | 36 怎么定义主流,现在流派太多了看不出什么耕牛?
关键是需求,有多少东西值得多线程?需求多了,应用自然会更丰富。。
现在提供thread-safe的编程语言多了,为什么一定要C/C++ ? |
|
c***c 发帖数: 21374 | 37 主流,我想就是市面上绝大多数应用程序在设计和写代码的时候都默认
考虑到了多处理器多线程的情况。现在的形势显然不是的,wired上面就报到
过intel怎么向ms抱怨说ms的操作系统无法体现现在intel的技术进步 |
|
L*****e 发帖数: 169 | 38 多线程在标准c++下有定义吗?
还是和具体的编译器实现有关,比如gcc和vc下实现不一样? |
|
|
b*****d 发帖数: 23 | 40 比如 如何 防止死锁, 多线程之间的 同步,
process 的memeory layout,
process 和 thread 的关系 之类的问题。
哪里可以找到比较全的书啊。
看了本 modern operating system, 讲了一点 但是没有讲全。
而且似乎太低层了, 什么 Kernel mode, user mode, PSW 之类。
虽有用, 但是 还不够, 也用不上啊。。。 |
|
z*****m 发帖数: 119 | 41 多线程编程,推荐Doug Lea的 《Concurrent Programming in Java》
多进程的话,推荐《Advanced Programming in the UNIX Environment》. |
|
b***y 发帖数: 2799 | 42 ☆─────────────────────────────────────☆
gandjmitbbs (Nothing) 于 (Wed Oct 22 13:37:01 2008) 提到:
如果多个线程竞争同一个文件读,引起性能急剧降低,可以从哪些方面入手改进?
另外top里的cpu status, user, nice, system, iowait里看到时间大部分消耗在nice
和iowait上了。这里的nice和system有什么区别?
☆─────────────────────────────────────☆
microbe (纵使相逢应不识) 于 (Wed Oct 22 14:00:33 2008) 提到:
nice
nice是nice<0的thread消耗的时间。system是kernel消耗的时间。
性能低的原因很简单,多个thread文件操作,seek时间增加,你的瓶颈在disk IO。你
多大的文件?
☆─────────────────────────────────────☆
gandjmitbbs (Nothing) 于 (We |
|
h***i 发帖数: 1970 | 43 python的多线程比较土,有global interpreter lock,性能不好。 |
|
r****t 发帖数: 10904 | 44 他这种是 IO blocking, 用线程是明显有好处的。 |
|
c**y 发帖数: 2282 | 45 下面这个简单的程序是我问题的简化版。我期待着多个线程可以共享这个变量$locker
,可是看起来似乎每人有一份独立的$locker,为何呢?
my $locker=0;
sub worker
{
my $id=shift;
$locker++;
print "#$id working :$locker\n";
sleep(int(rand(10)));
$locker--;
print "#$id exit :$locker\n";
}
for my $i (1..10)
{
$workers[$i] = threads->create('worker', "$i");
}
for my $i (1..10)
{
$workers[$i]->join();
}
print "over\n";
运行结果是:
#1 working :1
#2 working :1
#2 exit :0
#3 working :1
#4 working :1
#5 |
|
x****u 发帖数: 44466 | 46 应该用beginthreadex吧。
这个泄露不是一定存在的,如果你的C库动态链接或者线程内没有使用C函数,就不会有
泄露。但最好还是用beginthread吧。
t。 |
|
x****u 发帖数: 44466 | 47 这里的"应该"和"必须"是有微妙的差别的。
你该用beginthreadex,并且注意线程handle如果不释放是会占用系统资源的。
为了地球的安全和和平,我们最好不要随便违反msdn里面所说的原则,除非你非常清楚
自己在干什么。
() |
|