我正在運行一個具有字串相似性的函式來查找串列中字串的相似性。但我想通過在此串列中使用多執行緒以同步方式執行此操作。
每個執行緒自己完成整個任務。我想用多執行緒做一次任務
public class Runn implements Runnable {
public void run() {
synchronized (LOCK){
newList=listExe.getStringList();
try {
int i=1;
for (String s: newList) {
//System.out.println(s);
//System.out.println(newList.get(i));
System.out.println("Similarity " solution.findSimilarityRatio(s,newList.get(i)));
System.out.println(Thread.currentThread().getName());
System.out.println();
i ;
if(i==newList.size()){
break;
}
}
Thread.sleep(200);
}
catch (Exception e){
e.printStackTrace();
System.out.println(e.getMessage());
}
}
}
}
public static void main(String[] args) {
Runn runnable=new Runn();
ExecutorService pool= Executors.newFixedThreadPool(10);
for (int i=0;i<10;i ){
pool.execute(runnable);
}
}
uj5u.com熱心網友回復:
我會做類似以下的事情。Runnable您在串列中為每個字串提交一個。然后,您的 10 個執行緒將并行作業,以查找該字串與串列中所有元素的相似性。這是如何使用 Java 執行緒池的典型模式。
public static void main(String[] args) {
ExecutorService pool = Executors.newFixedThreadPool(10);
List<String> stringList = listExe.getStringList();
for (String str : stringList) {
pool.submit(new SimilarityRunnable(str, stringList));
}
// after we submit the last job to the pool we should shut it down
pool.shutdown();
}
private static class SimilarityRunnable implements Runnable {
private final String str;
private final List<String> stringList;
public SimilarityRunnable(String str, List<String> stringList) {
this.str = str;
this.stringList = stringList;
}
public void run() {
for (String listStr : stringList) {
// we deliberately use == here to skip the same list element
if (listStr == str) {
continue;
}
// if solution object is not reentrant, synchronize on it here
System.out.println(Thread.currentThread().getName()
": similarity of " str " to " listStr " is "
solution.findSimilarityRatio(str, listStr));
}
}
}
uj5u.com熱心網友回復:
public static void main(String[]args){
final ConcurrentLinkedQueue<String> queue=new ConcurrentLinkedQueue<>();
// fill the queue
// ...
final String s = ...; //
Runnable runnable=()->{
try {
for (String i =queue.poll(); i != null; i=queue.poll()) {
System.out.println("Similarity " solution.findSimilarityRatio(s, i));
System.out.println(Thread.currentThread().getName());
System.out.println();
}
} catch (Exception e){
e.printStackTrace();
System.out.println(e.getMessage());
}
};
ExecutorService pool=Executors.newFixedThreadPool(10);
for(int i=0;i<10;i ){
pool.execute(runnable);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/532708.html
標籤:爪哇多线程
