Java线程--创建和启动线程
2016-07-31 11:39
393 查看
创建线程的方式
extends Thread,重现run方法,在run方法中定义需要执行的任务
创建和启动线程
implements Runnable,实现run方法,在run方法中定义需要执行的任务
创建和启动线程
start()和run()方法的区别
利用线程ID区分执行run()和start()
测试
执行结果
注意这里的主线程是main方法执行后所产生的java.exe进程中的主线程。
thread1和thread2的线程ID不同,thread2和主线程ID相同,说明通过run方法调用并不会创建新的线程,而是在主线程中直接运行run方法,跟普通的方法调用没有任何区别
虽然thread1的start方法调用在thread2的run方法前面调用,但是先输出的是thread2的run方法调用的相关信息,说明新线程创建的过程不会阻塞主线程的后续执行。
在Java中,这2种方式都可以用来创建线程去执行子任务,具体选择哪一种方式要看自己的需求。直接继承Thread类的话,可能比实现Runnable接口看起来更加简洁,但是由于Java只允许单继承,所以如果自定义类需要继承其他类,则只能选择实现Runnable接口。
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接口。