java-多线程-创建线程的三种方式

torain      2022-05-05     421

关键词:

JAVA-多线程-创建线程的三种方式


  • 并发:同一时间只有一条指令在执行,多个进程的指令被快速轮换执行。
  • 并行:同一时间有多条指令在多个处理器上运行。
  • 进程:每个运行中的程序就是一个进程。
  • 线程:线程(Thread)也被称为轻量级进程(Lightweight Process),线程是进程的执行单元,在程序中是独立、并发的执行流。

多线程不会提高程序运行速度,但是会提高运行效率。


创建和使用线程的三种方式

继承Thread类创建的线程类

Thread类构造方法摘要

Thread()   // 分配新的 Thread 对象。
Thread(String name)  // 分配新的 Thread 对象。
Thread(Runnable target) // 分配新的 Thread 对象。
Thread(Runnable target, String name)    //分配新的 Thread 对象。

Thread类方法摘要

currentThread() // 返回对当前正在执行的线程对象的引用。
getName()   // 返回该线程的名称。
run()   // 如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。
setName(String name)    // 改变线程名称,使之与参数 name 相同。
start() //使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
sleep(long millis)  //在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。

通用的获取线程名称方法:Thread.currentThread().getName();

创建过程

  • 创建Thread子类,重写run()方法,run()方法称为线程的执行体。
  • 实例化Thread子类。
  • 实例调用start()方法开启线程。

代码

// Thread子类
public class MyThread extends Thread{
	public MyThread() {
		super();
	}
	public MyThread(String name) {
		super(name);
	}
	// Override描述线程任务
	public void run() {
		for (int i = 0;i < 100;i ++) {
			System.out.println(Thread.currentThread().getName() + i);
		}
	}	
}
// 主线程
public static void main(String[] args) {
	// 创建线程对象
	MyThread mt = new MyThread("main");
	// 开启线程
	mt.start();
}

实现Runnable接口创建线程

使用Runnable接口的好处

Runnable接口的实现类只需要做一件事,那就是重写run()方法。好处是:

  • 解决了单纯使用Thread类耦合性过强的问题
  • run()方法可以返回值
  • Thread类可以只用来启动线程

创建过程

  • 定义Runnable接口的实现类,重写run()方法。
  • 将Runnable的实现类的实例作为Thread的target实例化Thread类。
  • 使用Thread的实例启动线程。

代码

// Runnable实现类
public class MyRunnable implements Runnable{
    // 重写run()方法
	public void run() {
		for (int i = 0;i<100;i++) {
			System.out.println(Thread.currentThread().getName() + ":" + i);
		}
	}
}
// 主线程
public static void main(String[] args) {
	// 创建线程任务对象
	MyRunnable mr = new MyRunnable();
	// 创建线程对象并明确线程任务
	Thread th = new Thread(mr);
	// 启动线程
	th.start();
	// 描述主线程的任务
	for (int i=0;i<100;i++) {
		System.out.println(Thread.currentThread().getName() + ":" + i);
		
	}
}

使用线程池创建线程

在JDK1.5前的程序员将多个线程封装到ArrayList集合中,用这种方式来进行简化创建线程的操作。在JDK1.5后java添加了线程池的功能。

方法和类

  • Callable接口:与Runnable接口功能相似,用来指定线程的任务。其中的call()方法,用来返回线程任务执行完毕后的结果,call方法可抛出异常。
  • ExecutorService:线程池类
    Future submit(Callable task):获取线程池中的某一个线程对象,并执行线程中的call()方法
  • Future接口:用来记录线程任务执行完毕后产生的结果。

创建过程

  • 创建线程池对象
  • 创建Callable接口子类对象
  • 提交Callable接口子类对象
  • 关闭线程池

代码

// Callable实现类
public class TestCallable implements Callable<Integer>{
	private int num;
	// 重写call()
	public Integer call() throws Exception {
		int sum = 0;
		for (int i = 0;i <= 10;i ++) {
			sum += i;
		}
		return sum;
	}
	public TestCallable(int num) {
		super();
		this.num = num;
	}

}
// 主线程
public static void main(String[] args) {
	// 实例化线程池
	ExecutorService es = Executors.newFixedThreadPool(3);
	// 实例化Callable类
	TestCallable tc = new TestCallable(10);
	// 使用地址池实例创建线程并使用Future实例接收
	Future<Integer> f = es.submit(tc);

	try {
		// 输出结果
		System.out.println(f.get());
	} catch (InterruptedException | ExecutionException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

最后

所有的类的实例化完全可以使用匿名类进行处理,这样会让代码更简洁,也不会占用过多资源。

java多线程实现的三种方式

 JAVA多线程实现的三种方式Java中继承thread类与实现Runnable接口的区别 查看详情

java——多线程高并发系列之创建多线程的三种方式(threadrunnablecallable)(代码片段)

...)方法)写在前面历时一个星期,终于整完了Java多线程高并发这个系 查看详情

java多线程的三种实现方式

今天简单说一下Java三种多线程实现方式和区别,主要有实现Runnable、Callable和继承Thread三种方式。实现Runnable的方式这种方式比较常用,当我们的线程类有继承其他的类的情况下(Java不支持类多继承),并且线程任务不需要返回... 查看详情

java创建线程的三种主要方式

Java创建线程的主要方式一、继承Thread类创建  通过继承Thread并且重写其run(),run方法中即线程执行任务。创建后的子类通过调用start()方法即可执行线程方法。  通过继承Thread实现的线程类,多个线程间无法共享线程类的实... 查看详情

ajpfx关于java多线程实现的三种方式

JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。 1、继承Thread类实现多线程... 查看详情

java多线程实现的三种方式(代码片段)

文章目录实现多线程方式一:继承Thread类方法介绍实现步骤代码演示思考问题实现多线程方式二:实现Runnable接口Thread构造方法实现步骤代码演示实现多线程方式三:实现Callable接口方法介绍实现步骤代码演示三种实现方式... 查看详情

49多线程创建的三种方式之继承thread类(代码片段)

继承Thread类创建线程在java里面,开发者可以创建线程,这样在程序执行过程中,如果CPU空闲了,就会执行线程中的内容。使用Thread创建线程的步骤:1.自定义一个类,继承java.lang包下的Thread类2.重写run方法3.将要在线程中执行的... 查看详情

java创建线程的三种方式

http://blog.csdn.net/longshengguoji/article/details/41126119线程的四种创建方式:(1)继承Thread类(2)实现Runnable接口(3)应用程序可通过使用Executor框架来创建线程池(4)实现callable接口线程的几种可用状态(1)新建(2)可运行(3)运... 查看详情

java创建线程的三种方式

1.继承Runnable接口packagetest;classRunnableDemoimplementsRunnable{privateThreadt;privateStringthreadName;RunnableDemo(Stringname){threadName=name;System.out.println("Creating"+name);}publicvoidrun(){Syste 查看详情

java多线程开启的三种方式

1、继承Thread类,新建一个当前类对象,并且运行其start()方法1packagecom.xiaostudy.thread;23/**4*@desc第一种开启线程的方式5*@authorxiaostudy6*7*/8publicclassDemo1_ThreadextendsThread{910publicvoidrun(){11for(inti=0;i<10;i++){12Syste 查看详情

第五周作业(java多线程创建的三个方法)

  我最近在学习Java中多线程,并且觉得多线程这块在以后的Java开发中显得极为重要,就谈一下Java实现多线程的三种方式。JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实... 查看详情

[java多线程]线程创建的三种方式,线程的互斥(代码片段)

前言多线程:指的是这个程序(一个进程)运行时产生了不止一个线程并行和并发:并行:多个cpu实例或者多台机器同时执行一段处理逻辑,是真正的同时。并发:通过cpu调度算法,让用户看上去... 查看详情

[java多线程]线程创建的三种方式,线程的互斥,线程的同步(代码片段)

前言多线程:指的是这个程序(一个进程)运行时产生了不止一个线程并行和并发:并行:多个cpu实例或者多台机器同时执行一段处理逻辑,是真正的同时。并发:通过cpu调度算法,让用户看上去... 查看详情

创建线程的三种方式的对比?

(1)采用实现Runnable、Callable接口的方式创建多线程。优势是:线程类只是实现了Runnable接口或Callable接口,还可以继承其他类。在这种方式下,多个线程可以共享同一个target对象,所以非常适合多个相同线... 查看详情

java多线程实现的三种方法,附两个线程执行不同的输出

JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。1、继承Thread类实现多... 查看详情

java中创建线程的三种方法以及区别

Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。Java可以用三种方式来创建线程,如下所示:1)继承Thread类创建线程2)实现Runnable接口创建线程3)使用Callable和Future创建线程下面让我们分别来看看这三... 查看详情

线程的三种创建方式

java中创建线程的方法有三种:1.继承Thread类实现2.实现Runnable接口3.使用Callable和Future创建                      ------------------------继承Thread类创建线程-... 查看详情

创建线程的三种方式

1、继承Thread类,重写run方法,调用start方法启动线程;packageThread;//创建线程方式一:继承Thread类,重写run()方法,调用start开启线程//总结:注意,线程开启不一定立即执行,由CPU调度执行publicclassthreadDemo1extendsThread@Overridepublicvoi... 查看详情