Java 如何计算线程数?
如果在方法run中创建两个新线程,如何计算线程数?它创造了很多次,当记忆结束时,它就会下降Java 如何计算线程数?,java,multithreading,Java,Multithreading,如果在方法run中创建两个新线程,如何计算线程数?它创造了很多次,当记忆结束时,它就会下降 public class RabbitLab { public static void main(String[] args) { new Thread(new RabbitPrinter()).start(); } } class RabbitPrinter implements Runnable { public void run() { fo
public class RabbitLab {
public static void main(String[] args) {
new Thread(new RabbitPrinter()).start();
}
}
class RabbitPrinter implements Runnable {
public void run() {
for ( int y=0 ; y < 3 ; y++){
System.out.println("New rabbit born!");
int x=0;
while (x != 3) {
{
new Thread(new RabbitPrinter()).start();
new Thread(new RabbitPrinter()).start();
x++
}
}
}
}
}
公共类兔子实验室{
公共静态void main(字符串[]args){
新线程(新RabbitPrinter()).start();
}
}
类RabbitPrinter实现可运行{
公开募捐{
对于(int y=0;y<3;y++){
System.out.println(“新兔子出生!”);
int x=0;
而(x!=3){
{
新线程(新RabbitPrinter()).start();
新线程(新RabbitPrinter()).start();
x++
}
}
}
}
}
您的计数方向错误,导致无限循环:
int x=0;
while (x != 3) {
new Thread(new RabbitPrinter()).start();
new Thread(new RabbitPrinter()).start();
x--;
}
请尝试:
int x=3;
while (x != 0) {
new Thread(new RabbitPrinter()).start();
new Thread(new RabbitPrinter()).start();
x--;
}
或:
后两个版本中的任何一个都将运行三次,每次启动两个新线程,总共创建六个线程
要准确获取n
线程,请使用简单的for
循环:
const int n = 3;
for (int i = 0; i < n; ++i)
{
new Thread(new RabbitPrinter()).start();
}
int x = 3;
while (x != 0) {
new Thread(new RabbitPrinter()).start();
x--;
}
我不知道你想做什么 这里
x=0
您正在匹配x=3
和递减x
。。所以x
永远不会是3
增加x而不是减少
x++
假设您希望循环计数器应用于所有线程,而不仅仅是一个线程,因此不应使用“x”作为局部变量,您应该将其声明为静态(因此它由所有实例共享)和AtomicInteger(因此所有线程都可以安全地更新它,而不会出现争用问题): 试试这个:
class RabbitPrinter implements Runnable {
private static AtomicInteger x = new AtomicInteger(0);
public void run() {
for ( int y=0 ; y < 3 ; y++){
System.out.println("New rabbit born!");
while (x.getAndIncrement() < 3) {
new Thread(new RabbitPrinter()).start();
new Thread(new RabbitPrinter()).start();
}
}
}
}
类RabbitPrinter实现可运行{
私有静态AtomicInteger x=新的AtomicInteger(0);
公开募捐{
对于(int y=0;y<3;y++){
System.out.println(“新兔子出生!”);
while(x.getAndIncrement()<3){
新线程(新RabbitPrinter()).start();
新线程(新RabbitPrinter()).start();
}
}
}
}
通过使用(执行器)中的FixedThreadPool,您可以创建一定数量的线程,并在达到限制时停止[http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool%28int%29]
除此之外,Executor服务还提供了关闭池的实用方法。噢。。。这并不重要,当我开始新线程时,它的新x=0,所有线程都从x=0开始,并开始将其递增到3,但您正在递减。。增加x。。请看我编辑的答案这是一个小错误,对不起,但我的问题还没有解决。。。它不重要,当我启动新线程时,它的新x=0,所有线程都从x=0开始,并开始将其递增到3,但我想得到线程的数量,例如8;在RabbitPrinter中,我运行了两个新线程。1->2->4->8,在这一刻我想停下来;怎么做?每次迭代只产生一个线程?或者计算线程的确切数量,即
x+=2
,而不是x++
。请注意,如果每次迭代生成两个线程,则无法生成奇数个线程。请使用我的进行n=8
循环。
class RabbitPrinter implements Runnable {
private static AtomicInteger x = new AtomicInteger(0);
public void run() {
for ( int y=0 ; y < 3 ; y++){
System.out.println("New rabbit born!");
while (x.getAndIncrement() < 3) {
new Thread(new RabbitPrinter()).start();
new Thread(new RabbitPrinter()).start();
}
}
}
}