由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 有两道Java多线程的面试题能不能帮我看看?
相关主题
有人知道AtomicInteger是如何实现的么总结贴
Java concurrency的疑惑,难道我理解错了?操!本版连interlocked指令都没有懂的?
哪位同修能帮我测试一下哥决定常驻这个版了
C++(非VC++) 删除链表时如何对指针操作? 在线等回复!谢谢!哈,居然写完了作业
请教registerjava里用synchronized包住block就可以保护多线程同步问题了,这就是c里面的mutex吧?
Question on synchronization between processes问一个java基础的初始化的问题,一直搞不明白
科普贴,fusion IOVolatile variables do not provide any atomicity (转载)
单线程多线程说到底最近研究了一下 java AbstractQueuedSynchronizer
相关话题的讨论汇总
话题: dna话题: null话题: list话题: lock话题: java
进入Programming版参与讨论
1 (共1页)
s****y
发帖数: 503
1
该方法要去除list的所有null,因为输入的list非常、非常大,请问如何尽可能地改进
这个方法?
public void removeAllNull(LinkedList f) {
List lock = new ArrayList();
for (int i = 0; i < f.size(); i++) {
synchronized (lock) {
if (f.get(i) == null) {
lock = new ArrayList();
f.remove(i);
}
lock.add(f);
}
}
}
输入:[1, 2, null, 3, null, 4, null, 5, null, 6]
输出:[1, 2, 3, 4, 5, 6]
还有一道题,多线程共同扫描DNA,主线程在多线程中启动scanDNA方法,每个线程都有
一个私有的dnaList,每个线程共享一个“results”对象来向主线程报告进度,
成功扫描次数必须精确。请改正和修改scanDNA方法以提高任务性能。
private interface DNA {
public boolean scan();
}
public void scanDNA(List dnaList, Properties results) {
synchronized (results) {
Iterator i = dnaList.iterator();
Object lock = new Object();
while (i.hasNext()) {
if (i.next().scan()) {
String key = "Successful Scans Performed";
synchronized (lock) {
results.setProperty(key, String.valueOf(Integer.valueOf(
results.getProperty(key)) + 1));
}
}
}
}
}
g*****g
发帖数: 34805
2
No.1 is not a multithread program, I don't see why you need lock there. If
you are able to use Java 8, try parallel Stream. If you are using Java 7 and
under, split the list using Guava and run ExecutorService with
CountDownLatch or blocking on futures for coordination.
No.2 Use a ConcurrentHashMap with AtomicInteger.

【在 s****y 的大作中提到】
: 该方法要去除list的所有null,因为输入的list非常、非常大,请问如何尽可能地改进
: 这个方法?
: public void removeAllNull(LinkedList f) {
: List lock = new ArrayList();
: for (int i = 0; i < f.size(); i++) {
: synchronized (lock) {
: if (f.get(i) == null) {
: lock = new ArrayList();
: f.remove(i);
: }

e********2
发帖数: 495
3
Java 7有RecursiveTask,挺好的。

and

【在 g*****g 的大作中提到】
: No.1 is not a multithread program, I don't see why you need lock there. If
: you are able to use Java 8, try parallel Stream. If you are using Java 7 and
: under, split the list using Guava and run ExecutorService with
: CountDownLatch or blocking on futures for coordination.
: No.2 Use a ConcurrentHashMap with AtomicInteger.

e********2
发帖数: 495
4
话说Matlab也是用Java做的,为什么多线程那么慢?我觉得没人会用Matlab的Parallel
库。

【在 e********2 的大作中提到】
: Java 7有RecursiveTask,挺好的。
:
: and

n******t
发帖数: 4406
5
这两道题在实际编程中基本上没用.

【在 s****y 的大作中提到】
: 该方法要去除list的所有null,因为输入的list非常、非常大,请问如何尽可能地改进
: 这个方法?
: public void removeAllNull(LinkedList f) {
: List lock = new ArrayList();
: for (int i = 0; i < f.size(); i++) {
: synchronized (lock) {
: if (f.get(i) == null) {
: lock = new ArrayList();
: f.remove(i);
: }

s****y
发帖数: 503
6

and
第二题能不能帮我写个例子?

【在 g*****g 的大作中提到】
: No.1 is not a multithread program, I don't see why you need lock there. If
: you are able to use Java 8, try parallel Stream. If you are using Java 7 and
: under, split the list using Guava and run ExecutorService with
: CountDownLatch or blocking on futures for coordination.
: No.2 Use a ConcurrentHashMap with AtomicInteger.

g*****g
发帖数: 34805
7
ConcurrentMap map;
map.get(key).incrementAndGet();
s****y
发帖数: 503
8

如果我只要一个变量,是不是可以只用AtomicInteger?不加ConcurrentHashMap不影响
性能吧?
AtomicInteger a = new AtomicInteger();
a.incrementAndGet();

【在 g*****g 的大作中提到】
: ConcurrentMap map;
: map.get(key).incrementAndGet();

g*****g
发帖数: 34805
9
可以,不过既然只有一个变量,为啥要弄个Properties.

【在 s****y 的大作中提到】
:
: 如果我只要一个变量,是不是可以只用AtomicInteger?不加ConcurrentHashMap不影响
: 性能吧?
: AtomicInteger a = new AtomicInteger();
: a.incrementAndGet();

s****y
发帖数: 503
10

估计是题目想增加些难度,所以加个Properties。
题中要求Each thread provided with its own private share of the work (the
list, individual to each thread),是不是要为每个线程传入一个新的对象(实现
Callable的),每个对象的list都是私有的?

【在 g*****g 的大作中提到】
: 可以,不过既然只有一个变量,为啥要弄个Properties.
1 (共1页)
进入Programming版参与讨论
相关主题
最近研究了一下 java AbstractQueuedSynchronizer请教register
沉默的大多数呢?这版本来还有些很好讨论的Question on synchronization between processes
python下的expect科普贴,fusion IO
Static variables in function单线程多线程说到底
有人知道AtomicInteger是如何实现的么总结贴
Java concurrency的疑惑,难道我理解错了?操!本版连interlocked指令都没有懂的?
哪位同修能帮我测试一下哥决定常驻这个版了
C++(非VC++) 删除链表时如何对指针操作? 在线等回复!谢谢!哈,居然写完了作业
相关话题的讨论汇总
话题: dna话题: null话题: list话题: lock话题: java