英文:
Is it possible to automatically create Threads in java? depending on criteria
问题
import java.util.*;
public class test {
public test() {
int[] list = new int[]{1, 2, 3, 4, 5, 6};
ArrayList<Integer> myList = new Arrays.asList(list);
//list with 6 numbers that require 3 threads
}
public static void main(String[] args) {
new test();
}
}
每两个数字对应一个线程,例如如果有6个数字,则应自动创建3个线程。要如何实现自动创建线程?
英文:
import java.util.*;
public class test{
public test(){
int[] list = new int[]{1,2,3,4,5,6};
ArrayList<Integer> myList = new Arrays.asList(list);
//list with 6 numbers that require 3 threads
}
public static void main(String[] args){
new test();
}
}
For every two numbers in my list, i want to have a thread. i.e if their are 6 numbers, 3 threads should be detedted automatically. What must i do to automatically create Threads?
答案1
得分: 1
是的。一般被接受的方法是生成一个Runnable,然后将该Runnable提交给ExecutorService来管理线程。不要仅仅执行一个独立的线程。养成这种习惯是很糟糕的,它会让你无法控制线程。
ExecutorService service = Executors.newFixedThreadPool(5);
for (blah blahblah) {
Runnable runnable = new Runnable() {
....
}
service.execute(runnable);
}
只要确保在使用完Executor之后(或在程序终止时),进行以下操作:
service.shutdown();
或者
service.shutdownNow();
英文:
Yes. The generally accepted method is to generate a Runnable and submit that Runnable to an ExecutorService to manage the threads for you. DON'T JUST EXECUTE A LOOSE THREAD. That's a terrible habit to get in and it makes it impossible for you to control the threads.
ExecutorService service = Executors.newFixedThreadPool(5);
for (blah blahblah) {
Runnable runnable = new Runnable() {
....
}
service.execute(runnable);
}
Just be sure that when you're done with the executor (or at program termination), you do a
service.shutdown();
or
service.shutdownNow();
答案2
得分: 0
也许你可以在 new Arrays.asList(list);
之后或每次向容器中添加元素时,添加一个判断条件,判断容器的大小是否是 2
的倍数。
如果不是 2
的倍数且不小于 2
,则可以执行 -1
操作,并将之前可以组成一对的玩家放入一个线程中。
如果列表上还有其他操作,也可以按照这个逻辑进行处理。
int[] list = new int[]{1,2,3,4,5,6};
ArrayList<Integer> myList = new Arrays.asList(list);
// 包含 6 个数字的列表,需要 3 个线程
if (myList.size() % 2 == 0) { // 如果是 2 的倍数
for (int i = 0; i < myList.size() / 2; i++) {
// 你的代码
new Thread(new YourThread()).start();
}
} else { // 如果不是 2 的倍数
for (int i = 0; i < (myList.size() - 1) / 2 || myList.size() > 2; i++) {
// 例如:myList.size()=7,7-1=6,6/2=3
// 你的代码
new Thread(new YourThread()).start();
}
}
英文:
Maybe you can add a judgment wheather container's size is a multiple of 2
after new Arrays.asList(list);
or every time you add to this container.
If it's not a multiple of 2
and it's not less than 2
, then you can perform -1
, and put the previous players who can form a pair in a thread.
If there are other statements that operate on the list, you can also follow this logic.
int[] list = new int[]{1,2,3,4,5,6};
ArrayList<Integer> myList = new Arrays.asList(list);
//list with 6 numbers that require 3 threads
if(myList.size() % 2 == 0){//if it is a multiple of 2
for(int i=0;i<myList.size()/2;i++){
//your code
new Thread(new YourThread()).start();
}
}else{//if it isn't a multiple of 2
for(int i=0;i<(myList.size()-1)/2 || myList.size()>2;i++){
//e.g: myList.size()=7 7-1=6 6/2=3
//your code
new Thread(new YourThread()).start();
}
}
答案3
得分: 0
import java.util.*;
public class test{
public void test(){
int[] list = new int[]{1,2,3,4,5,6};
List<Thread> threadList = new ArrayList<Thread>();
for(int i =0; i < list.length/2; i++) {
Thread thread = new Thread();
threadList.add(thread);
}
}
public static void main(String[] args){
new test();
}
}
英文:
import java.util.*;
public class test{
public void test(){
int[] list = new int[]{1,2,3,4,5,6};
List<Thread> threadList = new ArrayList<Thread>();
for(int i =0; i < list.length/2; i++) {
Thread thread = new Thread();
threadList.add(thread);
}
}
public static void main(String[] args){
new test();
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论