复习多线程

Posted lwq168

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了复习多线程相关的知识,希望对你有一定的参考价值。

复习目标:

(1)线程与进程

(2)为什幺使用多线程

(3)多线程应用场景

(4)常用的多线程创建方式

(5)线程生命周期

线程与进程的区别:

  每一个在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是一组指令的集合,它可以在程序里独立执行。线程基本上是轻量级的进程,它负责在单个程序里执行多任务。

  使用多线程可以把占据时间长的程序中的任务放到后台去处理,是程序运行速度加快。在一些等待的任务实现上如:用户输入、文件读写和网络收发数据等。

  如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换,更多的线程需要更多的内存空间,线程的终止需要考虑其对程序运行的影响。需要防止线程死锁的情况。

总结:进程是所有线程的集合,每一个线程是进程中的一条执行路径。

为什幺要使用多线程:

  为了提高程序的效率。

多线程应用场景:

  主要能体现到多线程提高程序效率。举例: 迅雷多线程下载、分批发送短信等

常用的多线程创建方式:

  第一种继承Thread类,重写run方法

class CreateThread extends Thread{
	public void run(){
		for(int i=0;i<10;i++){
			System.out.println("i:"+i);
		}
	}
}

public class ThreadDemo {
	public static void main(String[] args) {
		System.out.println("---多线程创建开始-----");
		//1.创建一个线程
		CreateThread createThread=new CreateThread();
		//2.开始执行线程 注意:开始线程不是调用run方法,而是start方法
		System.out.println("---多线程创建启动---");
		createThread.start();
		System.out.println("---多线程创建结束-----");
	}

}

技术分享图片

调用start方法后,代码并没有从上往下执行,而是有一条新的执行分之。

  第二种实现Runnable接口,重写run方法

 

class CreateRunnable implements Runnable{

	@Override
	public void run() {
		for (int i = 0; i< 10; i++) {
			System.out.println("i:" + i);
		}
	}
	
}
public class ThreadDemoTwo {
	public static void main(String[] args) {
		System.out.println("-----多线程创建开始-----");
		CreateRunnable createThread=new CreateRunnable();
		System.out.println("-----多线程创建启动-----");
		Thread thread=new Thread(createThread);
		thread.start();
		System.out.println("-----多线程创建结束-----");
	}
}

 

  技术分享图片

第三种使用匿名内部类方式

 

public static void main(String[] args) {
		System.out.println("--多线程创建开始---");
		Thread thread=new Thread(new Runnable(){
			@Override
			public void run() {
				for (int i = 0; i< 10; i++) {
					System.out.println("i:" + i);
				}
			}
		});
		thread.start();
		System.out.println("--多线程创建结束----");
	}

  技术分享图片

使用继承Thread类好还是实现Runnable接口好?

  使用实现Runnable接口好,因为实现了接口还可以继承,继承了类就不能再继承了。

启动线程是使用调用start方法还是run方法?

  开始线程不是调用run方法,而是start方法。

获取线程对象以及名称

常用i线程api方法

start() 启动线程
currentThread() 获取当前线程对象
getID()  获取当前线程id   Thread-编号   该编号从0开始
gatName()  获取当前线程名称
sleep(long mill)  休眠线程
Stop() 停止线程
常用线程构造函数
Thread()  分配一个新的Thread对象
Thread(String name)  分配一个新的Thread对象,具有指定的name正如其名
Thread(Runnable r)   分配一个新的Thread对象
Thread(Runnable r,String name)  分配一个新的Thread对象

 

以上是关于复习多线程的主要内容,如果未能解决你的问题,请参考以下文章

Java复习——多线程与并发库

多线程复习笔记

多个用户访问同一段代码

复习多线程

线程学习知识点总结

复习多线程二