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

第一种方式:继承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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值