7.29建立线程(继承Thread类和实现Runnable接口)

本文详细介绍了在Java中创建线程的两种主要方法:继承Thread类和实现Runnable接口。通过具体的代码示例,展示了如何使用这两种方法创建并启动线程,以及在创建线程时可以使用的不同构造方法。

 

1.继承Thread类

 

以上方法都需要建立Thread类或它的子类的实例.Thread类的构造方法重载了八次

构造方法如下:

1.public Thread()
2.public Thread(Runnable target) //实现Runnable接口的实例,从Thread类继承的类的实例也可以作为target
3.public Thread(String name)//线程的名字,可以通过Thread类的setName()方法来设置
4.public Thread(Runnable target, String name)
5.public Thread(ThreadGroup group , Runnable target)
6.public Thread(ThreadGroup group , String name)
7.public Thread(ThreadGroup group , Runnable target , String name)
8.public Thread(ThreadGroup group , Runnable target , String name , long stackSize)

//ThreadGroup group  线程组
//long stackSize 线程栈的大小,一般默认为12KB

注:一个普通类可以通过继承Thread类来成为一个线程类,然后通过Thread类start()方法来执行线程代码,

虽然Thread类的子类可以直接实例化,但是子类必须要覆盖Thread类的run()方法才可以运行线程.

 

例子:

package cn.test.ThreadTest;

public class ThreadTest extends Thread{

	@Override
	public void run() {
		System.out.println(this.getName());
	}
	
	public static void main(String[] args) {
		System.out.println("当前线程:"+Thread.currentThread().getName());
		ThreadTest t1 = new ThreadTest();
		ThreadTest t2 = new ThreadTest();
		t1.start(); //调用start()方法时,会自动调用run()方法
		t2.start();
		//t1.run();
		t2.run();
		
		
	}

}

运行结果:

当前线程:main
Thread-0
Thread-1
Thread-1

 

例子:

package cn.test.ThreadTest;

public class SetNameTest extends Thread{
	private String who;
	@Override
	public void run() {
		System.out.println("who为: "+this.getName()); //who参数标识当前线程
	}
	public SetNameTest(String who) {
		super();
		this.who=who;
	}
	public SetNameTest(String who,String name) {//name为线程的名字
		super(name);
		this.who=who;
	}
	public static void main(String[] args) {
		SetNameTest t1 = new SetNameTest("thread1","这是thread1");
		SetNameTest t2 = new SetNameTest("thread2");
		SetNameTest t3 = new SetNameTest("thread3");
		t2.setName("这是thread2");
		t1.start();
		t2.start();
		t3.start();//t3 不是thread-2而是thread-1

	}

}

运行结果:

who为这是thread1
who为这是thread2
who为Thread-1

注:start()方法前后都可以用setName()方法,但是在调用了start()方法后使用setName()方法会产生不确定(因为可能已经调用了run()方法了)

 

start()方法不能多次调用,否则会报错:illegalThreadStateException异常

 

2.实现Runnable接口:

  1. 将Runnable接口的类实例化
  2. 建立一个Thread对象,并将第一步实例化后的对象作为参数传入Thread类的构造方法
  3. 通过start()方法创建线程
package cn.test.ThreadTest;

public class RunnableTest implements Runnable{
	@Override
	public void run() {
		System.out.println(Thread.currentThread().getName());
	}
	public static void main(String[] args) {
		RunnableTest r1 = new RunnableTest();
		RunnableTest r2 = new RunnableTest();
		Thread t1 = new Thread(r1,"这是r1");
		Thread t2 = new Thread(r2);
		t2.setName("这是Thread2");
		t1.start();
		t2.start();
	}
		
			
}

运行结果

这是r1
这是Thread2

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一身正气z

打赏随心就好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值