【Java】线程的创建和启动

来源:互联网 发布:发卡平台源码免签约 编辑:程序博客网 时间:2024/04/29 07:23

一、继承Thread类创建线程类

定义Thread类的子类,并重写run()方法, 该run()方法为线程执行体。

创建Thread子类的实例,即创建子线程对象。

调用线程对象的start()方法启动该线程。

public class FirstThread extends Thread{/** * @param args */private int i;public void run(){for(;i < 100; i++){System.out.println(getName()+" "+ i);}}public static void main(String[] args) {// TODO Auto-generated method stubfor(int i = 0; i <100; i++){System.out.println(Thread.currentThread().getName()+" "+i);if(i==20){new FirstThread().start();new FirstThread().start();}}}}
主线程的执行体是main()方法。

使用继承Thread类的方法来创建线程类时,多个线程之间无法共享线程类的实例变量。


二、实现Runnable接口创建线程类

定义Runnable接口的实现类,重写run()方法

创建Runnable实现类的实例,调用线程对象的start()方法。

public class FirstThread implements Runnable{private int i;public void run() {for(;i < 100; i++){System.out.println(Thread.currentThread().getName()+" "+ i);}}public static void main(String[] args) {for(int i = 0; i <100; i++){System.out.println(Thread.currentThread().getName()+" "+i);if(i==20){FirstThread ft = new FirstThread();new Thread(ft,"线程1").start();new Thread(ft,"线程2").start();}}}}
采用Runnable接口的方式创建多个线程可以共享线程类的实例变量。

三、使用Callable和Future创建线程。


线程的生命周期:new/Runnabe/Running/Blocked/Dead.

大多操作系统采用抢占式策略,系统会给每个可执行的线程一个小时间段来处理任务,当该时间段用完后,系统就会剥夺该线程所占用的资源。但一些小型设备如手机可能采用协作式调度策略,只有当一个线程调用了sleep()或yield()方法后才会放弃所占用的资源,也就是必须由该线程主动放弃所占资源。


不要对处于死亡状态的线程调用start()方法,会引发IllegalThreadStateException异常。




0 0