线程个人总结一

工欲善其事,必先利其器
要想使用好工具,就需要花时间来了解这个工具
所以先要了解已经理解线程类中的一些工具

工具一 Runnable 运行接口

在这里插入图片描述
1 Runnable接口应该由哪些打算通过某一线程执行其实例的类来实现,类必须定义为一个run的无参方法。

某一线程指的是线程类,比如Thread线程类
其 实例的类指的是实现了接口的类,而非Thread类的子类
简单点说就是通过一个Thread线程类来执行接口实例的类

2 Runnable接口为实现的该接口非Thread类的子类提供了一种激活方式,
通过实例化Thread对实例将实现接口的实例作为运行目标,就可以运行实现了非Thread子类的类,而无需创建Thread的子类。

这几句话是对上面说的,对上面的话解释,
激活方式是通过Thread的实例来运行Runnable接口实现类的对象实例

// Runnable接口的实现类
public class MyThread implements Runnable{
	public void run(){
		System.out.println("实现接口的类");
	}
}
//通过Thread类来运行MyThread类的run()方法
	第一步 先创建实现了接口的类实例
	Mythread my = new MyThread();

// 第二步 Thread线程将接口实现类的实例作为运行目标
	Thread  my = new  Thread(my);
	my.start();//运行my类中的run方法

工具2 Thread类

Runnable运行接口线程实现类,描述了线程有优先级和创建线程的两种方式。

第一种,声明一个继承Thread的类

通过该类的子类初始化父类Thread,使用父类中的start()方法启动子类中的run方法

第二种实现runnable(运行)接口

将实现接口类的实例作为一个参数,作为Thread线程启动run方法的对象。

在该类中有多个重载的构造方法,其实主要就是两个

Thread(ThreadGroup group,Runnable thread,String name)

创建一个线程,将接口的实例类作为线程组的一员,并设置Thread线程的名称

Thread(ThreaGroup group,Runnable thread,String long stackSize)

创建一个指定栈大小的线程,将接口实例类作为运行目标作为线程组的一员,并且设置Thread线程的名称

其他的创建线程的方法都是Thread( ThreadGroup group,Runnable run,String name)拆分出来的

创建新线程的第一种方式 继承Thread

//	将类声明为Thread的子类
 public class MyThread extends Thread{
 private int i=1;
 //先初始化父类Thread(String name);
 		public MyThread(String nanme){
			super(name);
		}
		
//		通过父类中的start()方法启动重写run()方法
	public vod run(){
		while(i<10){
			i++;
			System.out.println("i="+i)
		}
	}
	
 }
public static void main(String []	 args){

//	   先初始化一个新的线程,指定线程名称
	Mythread  my = new MyThread("子线程");
/*
*	第一步先初始化父类中的构造方法Thread(name)
*	Threadd my = new Mythread("子线程")
*	然后在初始化子类
*	Mythread my = new Mythread();
*/	 
//	使用创建的新线程来启动子类中的run方法
	my.start();
	
}

创建线程的第二种方式 实现接口

//		创建用某个线程来执行实例的类
public class myThread implements Runnable{
private int i=1;
		 
//		重写接口中的run方法
	public void run(){
		while(i<10){
			i++;
			System.out.println("i="+i)
		}
	}
}

测试类

public class demo{
	public static void main(String[] args)	{
//		1	创建接口类的实例
		myThread mt = new  myThread ();
		
/*
*2	创建一个要执行接口实例的类的新线程,将类的实例作为运行目标,
*	该目标调用类中run方法,同时设置该线程的名称
*/	
		Thread th = new Thread(mt,"新线程")
	/*		
	*   Thread( null,mt," 新线程",0)
	*	在这里是使用的,没有指定线程组,因此都线程组为null	
	*/	
		
	}

}

总结:

使用继承的方式来创建线程实际上跟接口差不多,只不过在创建线程方式不同,和用途不同,
1 接口方式是使用Thread直接创建线程,通过线程启动run方法,用于多重继承
2 继承Thread方式是通过子类创建线程,通过线程驱动run方法,只能单重继承
3 都是将实现实例的类作为调用run方法的对象

猜你喜欢

转载自blog.csdn.net/qq_42754261/article/details/86562998