gpt4 book ai didi

java - 线程和 public void run()

转载 作者:行者123 更新时间:2023-12-02 07:15:05 25 4
gpt4 key购买 nike

import java.lang.Thread;

class ThreadExperiment implements Runnable {
public static void main(String[] args) {
Thread t = new Thread(new ThreadExperiment());
@Override
public void run(){
do {
num ++;
try {
Thread.sleep(400);
} catch (InterruptedException e){
}
} while (num >= 0);
}

Thread t2 = new Thread(new ThreadExperiment());
@Override
public void run() {
do {
num2--;
try {
Thread.sleep(400);
} catch (InterruptedException e){
}
} while (num >= 1);
}


int num = 1;
int num2 = 10;
t.start();
t2.start();
if (num == num2) {
t.interrupt();
t2.interrupt();
}
}
}

尝试修补线程并原地踏步,总是如此接近。我想要两个线程,一个增加数量,另一个减少数量。如果他们见面,我希望他们停下来。然而,我在 public void run() 方面遇到了麻烦 - 目前,它说我不 t have a semi-colon next to both of them. What isn对吗?这是放置 public void run() 的正确位置吗?

另外,一些网站说我需要两个单独的类来创建线程 - 这有什么原因吗?也许如果一个线程依赖于另一个线程的计算但走了不同的路线,我可以理解,但我的感觉不同,只是两个独立的实体。

最后,我需要导入声明吗?

最佳答案

1).您希望您的代码能够编译。

您的编译问题是因为您要在 main 方法中声明 run 方法。分开你的方法声明,然后只使用 main 来创建和运行你的线程。

2).您希望有两个线程同时运行。

这意味着我们需要定义两个不同的线程类或一个具有处理递增和递减逻辑的线程。 Andrew Mao 的回答让您开始了解如何定义两个单独的线程。我上面的代码对 run 方法使用单个定义,该方法使用参数来确定要走哪条路。

3).您希望有两个线程对相同的数据同时操作,因为当它们分别递增/递减时,它们需要检查冲突。

执行此操作的一个简单方法是在 main 方法中创建要处理的对象(num1 和 num2),然后将对这些对象的引用传递给线程。我上面的代码中的示例。

4).你想要测试一些东西

所有 java.lang.* 都被假定为自动导入。为了清楚起见,将其放在那里并没有什么坏处,但您选择的开发工具上的自动导入器命令可能会将其删除为多余的。

public class ThreadExperiment implements Runnable {
/* these fields are unique to each instance of ThreadExperiment */
private int increment = 0;

/* these are used to point to the original num1 and num2 instances created in your main method */
private Integer myNumber;
private Integer theOtherNumber;


/**
* Constructor.
*/
public ThreadExperiment(int increment, Integer num1Ref, Integer num2Ref) {
this.increment = increment;
this.myNumber = num1Ref;
this.theOtherNumber = num2Ref;
}


@Override
public void run() {
do {
myNumber += increment;
try {
Thread.sleep(400);
} catch (InterruptedException e) {
}
System.out.println(Thread.currentThread().getName() + " -- " + myNumber);
} while (!myNumber.equals(theOtherNumber));
}


/**
* Your static main method used to instantiate & start threads
*/
public static void main(String[] args) {
Integer num1 = 0;
Integer num2 = 10;

Thread t = new Thread(new ThreadExperiment(1, num1, num2), "Thread 1");
Thread t2 = new Thread(new ThreadExperiment(-1, num2, num1), "Thread 2");
t.start();
t2.start();
}

}

关于java - 线程和 public void run(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15036325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com