Java线程——两种创建线程的方式

来源:互联网 发布:flex java 做什么的 编辑:程序博客网 时间:2024/05/22 12:36

第一种方式:继承Thread类并重写run()方法来创建线程

/* * 继承Thread类并重写run()方法来创建线程 * 程序启动时总是会自动的调用main()方法执行主线程,因此mian()是创建和启动线程的地方。首先创建了t1、t2、t3三个线程并传入了相应的参数 * 程序运行到t1.start();启动线程病并自动调用run()方法,在run()方法中,sleep(200)这个方法使t1线程暂停200毫秒,之后线程才可以恢复运行 * 在t1线程休眠的时间里,把执行权主动的交给了t2,而不是等t1恢复运行后再让t2运行,所以才会打印出上面的运行结果 * */package com.js.thread;public class TextDemo {public static void main(String[] args){ThreadSubName t1 = new ThreadSubName("Thread 1", 200);ThreadSubName t2 = new ThreadSubName("Thread 2", 100);ThreadSubName t3 = new ThreadSubName("Thread 3", 300);t1.start();t2.start();t3.start(); }}class ThreadSubName extends Thread{private String threadName;private int Ms;public ThreadSubName(String name,int Ms){this.threadName=name;this.Ms=Ms;}public void run(){try {sleep(Ms);} catch (InterruptedException e) {System.out.println("The Thread is Wrong");e.printStackTrace();}System.out.println(" 名字叫:"+threadName+"开始休眠"+Ms+"毫秒");}}


第二种方式:实现Runnable并重写run()方法来创建线程

/* * 实现Runnnable接口并重写run()方法来创建线程 * 因为java是单继承 * 这段代码首先说明了用Runnable接口创建线程是可以解决类多继承这个难点的。因为RunnableDemo这个类不仅实现了Runnable接口,同时也继承了ThreadRun类 * 在创建线程对象时要注意,RunnableDemo r1 = new RunnableDemo();虽然RunnableDemo是Runnable的子类,但是r1并不是线程对象 * Thread t1 = new Thread(r1,"第一线程");这才得到一个线程对象 * 创建真正的线程对象时必须用带有Runnable参数的Thread类创建的对象 * public Thread(Runnable target); * public Thread(ThreadGroup group,Runnable target); * public Thread(Runnable target,String name); * public Thread(ThreadGroup group,Runnable target,String name); * 当创建了好几个线程的时候,很多线程的工作任务是类似或者一致的,这样我们就可以使用ThreadGroup来管理他 * 们,ThreadGroup可以随时的获取在他里面的线程的运行状态,信息,或者一条命令关闭掉这个group里面的所有 * 线程,非常的简单实用 */package com.js.thread;public class TextDemo_1 { public static void main(String[] args){ RunnableDemo r1 = new RunnableDemo(); r1.RDemo(r1); System.out.println(r1.print()); }}class ThreadRun{public String print(){return "我是RunnableDemo的父类";}}class RunnableDemo extends ThreadRun implements Runnable{Thread  t2 = null;public void RDemo(RunnableDemo r1){Thread t1 = new Thread(r1,"第一线程");System.out.println("正在运行的是:"+t1);t2 = new Thread(r1,"第二线程");System.out.println("创建第二线程");System.out.println("第一线程开始休眠");t2.start();try {t1.sleep(400);} catch (InterruptedException e) {System.out.println("第一线程错误");}System.out.println("第一线程恢复运行");}public void run(){try {for(int i=0;i<800;i+=100){System.out.println("第二线程的休眠时间:"+i);t2.sleep(i);}} catch (InterruptedException e) {System.out.println("第二线程错误");}System.out.println("第二线程结束");}}


0 0
原创粉丝点击