java 非法线程_Java多线程应注意的细节之一

Java多线程应注意的细节之一

我们知道在Java中有两种方式可以实现Java的多线程,一种是通过继续Thread类并重写run()方法;另一种是通过实现Runnable接口。废话少说,先跑下面的例子先:

package com.kkoolerter.thread;

public class ThreadTest {

public static void main(String[] args) {

new ThreadA("threadA").start();

new Thread(new RunnableA("runnable")).start();

new RunnableA("runnableA").run();

new RunnableA("runnableB").run();

new ThreadA("threadB").run();

new ThreadA("threadC").run();

System.out.println("[threadC] finished executing.");

}

}

class ThreadA extends Thread{

public ThreadA(String name){

this.setName(name);

}

public ThreadA(Runnable runnable){

super(runnable);

}

@Override

public void run() {

System.out.println("Thread:["+this.getName()+"]begine");

System.out.println(this.getName()+" current thread is:["+Thread.currentThread().getName()+"]");

for(long i = 0;i<9999999;i++);

System.out.println("Thread:["+this.getName()+"]end\n");

}

}

class RunnableA implements Runnable{

private String name;

public RunnableA(String name){

this.name = name;

}

@Override

public void run() {

System.out.println("Thread:["+this.name+"]begine");

System.out.println(this.name+" current thread is:["+Thread.currentThread().getName()+"]");

for(long i = 0;i<9999999;i++);

System.out.println("Thread:["+this.name+"]end\n");

}

}

上述例子可能的一个输出结果:

Thread:[threadA]begine

threadA current thread is:[threadA]

Thread:[runnableA]begine

runnableA current thread is:[main]

Thread:[threadA]end

Thread:[runnable]begine

runnable current thread is:[Thread-1]

Thread:[runnableA]end

Thread:[runnableB]begine

runnableB current thread is:[main]

Thread:[runnable]end

Thread:[runnableB]end

Thread:[threadB]begine

threadB current thread is:[main]

Thread:[threadB]end

Thread:[threadC]begine

threadC current thread is:[main]

Thread:[threadC]end

[threadC] finished executing.

从运行的结果可以知道,如果直接调用Thread或Runnable接口实现类的run()方法,那么它将在main方法线程里按顺序运行,相当于在main()方法里调用一个普通方法。所以在实现多线程时,应该调用Thread的start()方法,因为调用start()方法使该线程开始执行;Java 虚拟机调用该线程的 run 方法。结果是两个线程并发地运行;当前线程(从调用返回给 start 方法)和另一个线程(执行其 run 方法)。

注意:多次启动一个线程是非法的。特别是当线程已经结束执行后,不能再重新启动。

©著作权归作者所有:来自51CTO博客作者juxiangwu的原创作品,如需转载,请注明出处,否则将追究法律责任

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值