java 判断是主线程还是子线程
时间: 2023-08-10 14:06:03 浏览: 421
可以通过判断当前线程是否为主线程来判断是主线程还是子线程。在 Java 中,可以使用 Thread 类的静态方法 currentThread() 获取当前线程对象,然后通过调用线程对象的 getName() 方法获取线程名称,若线程名称为 "main",则为主线程,否则为子线程。
示例代码如下:
```
if(Thread.currentThread().getName().equals("main")){
System.out.println("当前线程是主线程");
} else {
System.out.println("当前线程是子线程");
}
```
相关问题
请编写java多线程程序,在主线程 main 之外,定义两个子线程,分别用来找出某个整数区间内的所有素数。程序运行时,主线程 main 创建子线程并向其传递两个整型的参数,子线程找出这两个整数之间的所有素数,并输出。利用继承 Thread 类
下面是一个简单的 Java 多线程程序,使用继承 Thread 类的方式实现:
```java
public class PrimeNumberThread extends Thread {
private int start;
private int end;
public PrimeNumberThread(int start, int end) {
this.start = start;
this.end = end;
}
@Override
public void run() {
for (int i = start; i <= end; i++) {
if (isPrime(i)) {
System.out.println(i);
}
}
}
private boolean isPrime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
}
```
这个程序定义了一个 PrimeNumberThread 类,继承了 Thread 类,并实现了 run() 方法。在构造函数中,传入需要查找素数的区间起始值和结束值。在 run() 方法中,遍历这个区间,判断每个数是否是素数,如果是素数就输出。isPrime() 方法用来判断一个数是否是素数。
在主函数中,创建两个 PrimeNumberThread 实例,并启动它们的线程:
```java
public static void main(String[] args) {
int start = 1;
int end = 100;
PrimeNumberThread thread1 = new PrimeNumberThread(start, end/2);
PrimeNumberThread thread2 = new PrimeNumberThread(end/2+1, end);
thread1.start();
thread2.start();
}
```
这段代码创建了两个 PrimeNumberThread 实例,分别传入了区间起始值和结束值。然后调用 start() 方法启动这两个线程,线程会在后台运行并输出素数。注意,这里的区间划分是按照区间长度的一半来划分的,可以根据实际情况进行调整。
·请用java编程,使用控制run方法中循环条件的方式来结束一个线程 练习:创建一个多线程程序,其中除主线程之外有两个线程,控制这两个线程,使一个在主线程运行30次之后停止,另一个在主线程运行60次之后停止
在Java中,我们可以使用`Thread`类的`interrupt()`方法来中断一个正在运行的线程,并通过检查`Thread.isInterrupted()`方法来响应这个中断请求。为了在主线程中控制其他两个线程,我们可以在主线程的循环里判断是否需要中断它们。这里是一个简单的示例:
```java
public class Main {
private Thread thread1;
private Thread thread2;
public static void main(String[] args) throws InterruptedException {
Main main = new Main();
main.startThreads();
for (int i = 0; i < 90; i++) {
System.out.println("Main loop iteration: " + i);
// 检查是否需要中断thread1
if (i >= 30 && main.thread1 != null && main.thread1.getState() == Thread.State.RUNNABLE) {
main.thread1.interrupt();
}
// 等待一段时间,模拟主线程执行其他任务
Thread.sleep(500);
// 检查是否需要中断thread2
if (i >= 60 && main.thread2 != null && main.thread2.getState() == Thread.State.RUNNABLE) {
main.thread2.interrupt();
}
}
}
private void startThreads() {
thread1 = new Thread(() -> {
while (!Thread.currentThread().isInterrupted()) {
System.out.println("Thread 1 running...");
try {
Thread.sleep(1000); // 假设每个循环需要1秒
} catch (InterruptedException e) {
Thread.currentThread().interrupt(); // 如果被中断,清理异常并退出
}
}
System.out.println("Thread 1 stopped.");
});
thread2 = new Thread(() -> {
while (!Thread.currentThread().isInterrupted()) {
System.out.println("Thread 2 running...");
try {
Thread.sleep(500); // 假设每个循环需要半秒
} catch (InterruptedException e) {
Thread.currentThread().interrupt(); // 如果被中断,清理异常并退出
}
}
System.out.println("Thread 2 stopped.");
});
thread1.start();
thread2.start();
}
}
阅读全文