1、多线程启动
有两种启动方式
1、实现Runable接口
2、继承Thread类并且重写run()方法
在执行进程中的任务才会产生线程,所以需要实现Runable接口并且重写run()方法,然后将Runable的实现对象作为参数传递给Thread类。
代码示例:
public class cuo { public static void main(String[] args){ MyRunable m = new MyRunable(); new Thread(m).start(); }} class MyRunable implements Runnable{ public void run(){ System.out.println("我的任务开始执行。。。"); } }
代码结果:
第二个方法的代码示例:
public class apci { public static void main(String[] args){ Myth mt = new Myth(); mt.start(); } } class Myth extends Thread{ public void run(){ System.out.println("thread running"); } }
代码结果:
在一般情况下都会使用实现Runable接口然后启动线程,因为这样可以提高程序的灵活性和拓展性,使用Runable接口描述任务看更加容易理解
注意:执行start()方法的顺序并不是线程启动的的顺序。
2、线程标识
Thread类用于管理线程,如:设置管理线程优先级、设置Daemon属性,读取线程的名字和ID、启动线程任务、暂停线程任务、中断线程等等。
下面是关于ID和名称的代码示例:
public class apci { public static void main(String[] args){ for(int i=0;i<5;i++){ Myth mt = new Myth(); Thread th = new Thread(mt); th.start(); System.out.println(th.getId()); System.out.println(th.getName()); }} } class Myth extends Thread{ public void run(){ System.out.println("任务开始执行、、、"); } }
代码结果如下:
注意:因为线程的问题所以每次结果可能会出现大同小异的情况,不必担心,正常情况(我也执行了很多次都不一样,所以我只能把这个情况归咎为线程的抢占模式的问题)