Java线程会创建额外的线程,我不确定为什么会发生这种情况!如果很明显,我仍然对java不满意,对不起,但是请帮帮我
好吧,我创建了2个线程来做某事,但是创建了额外的线程
这是代码
import java.util.*;
import java.util.Arrays;
class consuming_producing extends Thread {
static int arrX[] = new int[300];
int y;
static int var=0;
int Request_type;
consuming_producing(int x, int Request) {
y = x;
Request_type = Request;
}
int thread_number;
consuming_producing(int x, int Request ,int thread) {
y = x;
thread_number=thread;
Request_type = Request;
}
public synchronized void run() {
switch (Request_type) {
case 1: {
// start producing the data and store it to the array
for (int i = y; i < 300; i = i + 3) {
arrX[i] = (int) (Math.random() * 10 + 1);
System.out.println("produced " + arrX[i]);
}
}
// *******************
case 2: { // consuming the data
for (int ww = y; ww < y+150;ww++) {
int sum = Arrays.stream(arrX).sum();
System.out.println("Sum =" +var+" by thread " + thread_number);
//Arrays.fill(arrX,0);
var+=1;
}
}
}
}
}
class consumer_producer {
public static void main(String[] args){
consuming_producing arr_Producer_obj[] = new consuming_producing[3];
// create a [enter image description here][1]thread for producing
for (int i=0;i<3;i++){
int x =0;
arr_Producer_obj[i]=new consuming_producing(x,1);
arr_Producer_obj[i].start();
x+=1;
}
// ***************
consuming_producing arr_Consumer_obj[]=new consuming_producing[2];
int thread=1; // this is the name of thread im creating for ny refrence
int x=0;
for (int i=0;i<=1;i++){
arr_Consumer_obj[i]=new consuming_producing(x,2, thread);
arr_Consumer_obj[i].start();
x+=150;
thread+=1;**
}
}
}
这是输出图像,请检查
答案 0 :(得分:0)
每次程序到达Thread.start()方法时,它将创建一个新线程,以及main()方法/入口点的基础线程。 您的main方法有2个for循环,第一个看起来将创建3个线程,第二个看起来将创建2个其他线程。
扩展Thread类并实现'run()'方法时,在该类的实例上调用start()将创建一个新线程以在其上运行'run()'方法。
答案 1 :(得分:0)
好吧,您的代码有很多问题。但是回答您的问题很简单:
您在2个for
循环中创建了一堆线程,但是线程之间没有同步\通信点,因此它们的作用独立,即您调用{ {1}}实例将在单独的线程中执行start
方法。如果只有在第一个循环中的线程完成执行后才创建第二个循环,程序中就不会阻止任何线程。因此,这里没有创建额外的线程。您只是以错误的方式解决了您的解决方案。