我有一个回调函数,我收到一个字符串。 由于处理需要时间,因此将该字符串传递给单独的线程进行处理。 此外,由于可以同时进行多个回调,我希望有一个同步锁,直到我将字符串传递给新线程。但是我也不希望锁定新线程(处理正在进行中)。
有人可以帮我弄清楚这个设计吗?
我已经写了下面的代码但是在这里我认为在这里没有回调可以接收,直到单独线程的整个处理也完成,从而打败了这个新线程的整个目的。
String sLine;
onClick(String line){
synchronized (lock) {
sLine = line;
new Thread(new Runnable() {
@Override
public void run() {
doProcessing(Sline);
}).start();
}
}
答案 0 :(得分:1)
答:我认为你不需要锁定。多线程无法访问此字符串。此外,由于可以同时进行多个回调,我希望有一个同步锁,直到我将字符串传递给新线程。
但是我不希望锁定新的线程(处理正在进行中)。
答:我发现此处没有任何内容被锁定:)我认为如果您这样做会更好:
// Implement class Runner
public class Runner implements Runnable {
private String mLine;
public Runner(String line) {
mLine = line;
}
@Override
public void run() {
process();
}
public void process() {
// Do processing with mLine
// Put synchronized if you need, it bases on your context
}
}
// Initialize thread pool
private ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 100, 1000, TimeUnit.SECONDS, new LinkedBlockingDeque<Runnable>());
// Execute runner when receiving callback
onClick(String s) {
Runner runner = new Runner(s);
executor.execute(runner);
}
答案 1 :(得分:0)
尝试更改如下
String sLine;
onClick(final String line){
sLine = line;
new Thread(new Runnable() {
@Override
public void run() {
doProcessing(line);
}).start();
}