java 在一个线程中启动另一个线程_JAVA:在一个线程中启动另外一个线程

##常见

package hellojava;

import java.util.logging.Level;

import java.util.logging.Logger;

public class HelloJava {

static class TestTask implements Runnable {

private String taskName;

public TestTask(String taskName) {

this.taskName = taskName;

}

@Override

public void run() {

for (int i=0; i<200; i++) {

System.out.println(taskName + ": " + i);

try {

Thread.sleep(1*1000);

} catch (InterruptedException ex) {

Logger.getLogger(HelloJava.class.getName()).log(Level.SEVERE, null, ex);

}

}

}

}

public static void main(String[] args){

System.out.println(Thread.currentThread().getName() + " main thread start!");

Thread t1 = new Thread(new HelloJava.TestTask("a"));

Thread t2 = new Thread(new HelloJava.TestTask("b"));

t1.start();

t2.start();

try {

Thread.sleep(200*1000);

} catch (InterruptedException ex) {

Logger.getLogger(HelloJava.class.getName()).log(Level.SEVERE, null, ex);

}

System.out.println("main thread end!");

}

}

打开jconsole,查看线程:

984e5aaf6eb983a4dee4bcf83e2eb23a.png

可以看到main、thread-0、thread-1。

##在一个线程中启动一个线程

package hellojava;

import java.util.logging.Level;

import java.util.logging.Logger;

public class HelloJava {

static class TestTask implements Runnable {

private String taskName;

private TestTask anotherTask;

private int num;

public String getTaskName() {

return this.taskName;

}

public TestTask(String taskName, int num) {

this.taskName = taskName;

this.num = num;

}

public TestTask(String taskName, int num, TestTask anotherTask) {

this.taskName = taskName;

this.num = num;

this.anotherTask = anotherTask;

}

@Override

public void run() {

if (this.anotherTask!=null) {

System.out.println("start another task: " + this.anotherTask.getTaskName() +

" in task: " + this.getTaskName());

new Thread(anotherTask).start();

}

for (int i=0; i

System.out.println(taskName + ": " + i);

try {

Thread.sleep(1*1000);

} catch (InterruptedException ex) {

Logger.getLogger(HelloJava.class.getName()).log(Level.SEVERE, null, ex);

}

}

System.out.println("task: " + this.getTaskName() + " end");

}

}

public static void main(String[] args){

System.out.println(Thread.currentThread().getName() + " main thread start!");

TestTask t1 = new HelloJava.TestTask("a", 20);

TestTask t2 = new HelloJava.TestTask("b", 10, t1);

new Thread(t2).start();

System.out.println("main thread end!");

}

}

运行结果:

main main thread start!

main thread end!

start another task: a in task: b

b: 0

a: 0

b: 1

a: 1

b: 2

a: 2

b: 3

a: 3

b: 4

a: 4

b: 5

a: 5

b: 6

a: 6

b: 7

a: 7

b: 8

a: 8

b: 9

a: 9

task: b end

a: 10

a: 11

a: 12

a: 13

a: 14

a: 15

a: 16

a: 17

a: 18

a: 19

task: a end

在任务b中启动任务a,任务b结束后,a的运行并未受到影响。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值