您的位置:首页 > 编程语言 > Java开发

Java线程--创建和启动线程

2016-07-31 11:39 393 查看
创建线程的方式
extends Thread,重现run方法,在run方法中定义需要执行的任务

public class CycleThread extends Thread {

@Override
public void run() {
while (true) {
System.out.println("sleepping");
System.out.println("studying");
System.out.println("eatting");
System.out.println("one day is over");
System.out.println();
}
}

}


创建和启动线程

public class TestThread {

public static void main(String[] args) {

CycleThread thread=new CycleThread();

thread.start();
}

}

 implements Runnable,实现run方法,在run方法中定义需要执行的任务

public class CycleRunnable implements Runnable {

@Override
public void run() {
while (true) {
System.out.println("sleepping");
System.out.println("studying");
System.out.println("eatting");
System.out.println("one day is over");
System.out.println();
}
}

}

创建和启动线程

public class TestRunnable {
public static void main(String[] args) {

CycleRunnable circleRunnable=new CycleRunnable();

Thread thread=new Thread(circleRunnable);

thread.start();

}

}

start()run()方法的区别
利用线程ID区分执行run()start()

public class RunStartThread extends Thread {

private String name;

public RunStartThread(String name)
{
this.name=name;
}

@Override
public void run() {
System.out.println(name +"线程ID: " + Thread.currentThread().getId());
}

}

测试

public class TestRunStart {
public static void main(String[] args) {

System.out.println("主线程ID: "+Thread.currentThread().getId());

RunStartThread thread1=new RunStartThread("thread1");
thread1.start();

RunStartThread thread2=new RunStartThread("thread2");
thread2.run();

}

}

执行结果



注意这里的主线程是main方法执行后所产生的java.exe进程中的主线程。
thread1和thread2的线程ID不同,thread2和主线程ID相同,说明通过run方法调用并不会创建新的线程,而是在主线程中直接运行run方法,跟普通的方法调用没有任何区别
虽然thread1的start方法调用在thread2的run方法前面调用,但是先输出的是thread2的run方法调用的相关信息,说明新线程创建的过程不会阻塞主线程的后续执行。
在Java中,这2种方式都可以用来创建线程去执行子任务,具体选择哪一种方式要看自己的需求。直接继承Thread类的话,可能比实现Runnable接口看起来更加简洁,但是由于Java只允许单继承,所以如果自定义类需要继承其他类,则只能选择实现Runnable接口。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: