搜索
首页JavaJava基础java多线程如何实现

java多线程如何实现

Dec 04, 2019 am 11:06 AM
java

java多线程如何实现

java实现多线程的方法:(推荐:java视频教程

方式一:继承Thread类的方式

1、创建一个继承于Thread类的子类

2、重写Thread类中的run():将此线程要执行的操作声明在run()

3、创建Thread的子类的对象

4、调用此对象的start():①启动线程 ②调用当前线程的run()方法

方式二:实现Runnable接口的方式

1、创建一个实现Runnable接口的类

2、实现Runnable接口中的抽象方法:run():将创建的线程要执行的操作声明在此方法中

3、创建Runnable接口实现类的对象

4、将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象

5、调用Thread类中的start():① 启动线程  ② 调用线程的run() --->调用Runnable接口实现类的run()

以下两种方式是jdk1.5新增的!

方式三:实现Callable接口

说明:

1、与使用Runnable相比, Callable功能更强大些

2、实现的call()方法相比run()方法,可以返回值

3、方法可以抛出异常

4、支持泛型的返回值

5、需要借助FutureTask类,比如获取返回结果

Future接口可以对具体Runnable、Callable任务的执行结果进行取消、查询是否完成、获取结果等。FutureTask是Futrue接口的唯一的实现类FutureTask 同时实现了Runnable, Future接口。它既可以作为Runnable被线程执行,又可以作为Future得到Callable的返回值

方式四:使用线程池

说明:

提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毁、实现重复利用。类似生活中的公共交通工具。

好处:

1、提高响应速度(减少了创建新线程的时间)

2、降低资源消耗(重复利用线程池中线程,不需要每次都创建)

3、便于线程管理

示例:

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
import java.util.concurrent.ThreadPoolExecutor;

//方式一
class ThreadTest extends Thread {
	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println(Thread.currentThread().getName() + ":" + i);
		}
	}
}

// 方式二
class RunnableTest implements Runnable {
	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println(Thread.currentThread().getName() + ":" + i);
		}
	}
}

// 方式三
class CallableTest implements Callable<Integer> {

	@Override
	public Integer call() throws Exception {
		int sum = 0;
		for (int i = 0; i < 10; i++) {
			System.out.println(Thread.currentThread().getName() + ":" + i);
			sum += i;
		}
		return sum;
	}

}

// 方式四
class ThreadPool implements Runnable {

	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println(Thread.currentThread().getName() + ":" + i);
		}
	}

}

public class Test {
	public static void main(String[] args) {
		// 继承Thread
		ThreadTest thread = new ThreadTest();
		thread.setName("方式一");
		thread.start();

		// 实现Runnable
		RunnableTest runnableTest = new RunnableTest();
		Thread thread2 = new Thread(runnableTest, "方式二");
		thread2.start();

		// 实现Callable<> 有返回值
		CallableTest callableTest = new CallableTest();
		FutureTask<Integer> futureTask = new FutureTask<>(callableTest);
		new Thread(futureTask, "方式三").start();
		// 返回值
		try {
			Integer integer = futureTask.get();
			System.out.println("返回值(sum):" + integer);
		} catch (Exception e) {
			e.printStackTrace();
		}

		// 线程池
		ExecutorService pool = Executors.newFixedThreadPool(10);

		ThreadPoolExecutor executor = (ThreadPoolExecutor) pool;
		/*
		 * 可以做一些操作:
		 * corePoolSize:核心池的大小 
		 * maximumPoolSize:最大线程数
		 * keepAliveTime:线程没任务时最多保持多长时间后会终止
		 */
		executor.setCorePoolSize(5);

		// 开启线程
		executor.execute(new ThreadPool());
		executor.execute(new ThreadPool());
		executor.execute(new ThreadPool());
		executor.execute(new ThreadPool());

	}

}

更多java知识请关注java基础教程栏目。

以上是java多线程如何实现的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Java中有哪些不同的垃圾收集算法(串行,并行,CMS,G1,ZGC)?Java中有哪些不同的垃圾收集算法(串行,并行,CMS,G1,ZGC)?Mar 14, 2025 pm 05:06 PM

本文讨论了各种Java垃圾收集算法(串行,并行,CMS,G1,ZGC),它们的性能影响和适合大量堆的应用。

什么是Java虚拟机(JVM),它在内部如何工作?什么是Java虚拟机(JVM),它在内部如何工作?Mar 14, 2025 pm 05:05 PM

本文讨论了Java虚拟机(JVM),详细介绍了其在不同平台运行Java程序中的作用。它说明了JVM的内部流程,密钥组件,内存管理,垃圾收集和性能Optimizatio

如何使用Java的Nashorn Engine用JavaScript脚本?如何使用Java的Nashorn Engine用JavaScript脚本?Mar 14, 2025 pm 05:00 PM

Java的Nashorn Engine可以在Java应用程序中启用JavaScript脚本。关键步骤包括设置Nashorn,管理脚本和优化性能。主要问题涉及安全性,内存管理和未来兼容性

如何使用Java的Try-with-Resources语句进行自动资源管理?如何使用Java的Try-with-Resources语句进行自动资源管理?Mar 14, 2025 pm 04:59 PM

Java的Try-with-Resources通过自动关闭文件流或数据库连接等资源来简化资源管理,从而提高代码可读性和可维护性。

如何使用Java的枚举来表示固定的值集?如何使用Java的枚举来表示固定的值集?Mar 14, 2025 pm 04:57 PM

Java枚举代表固定的值集,通过自定义方法和构造函数提供类型安全性,可读性和其他功能。它们增强了代码组织,可用于开关语句中以进行有效的价值处理。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),