百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Java面试篇基础部分-Java创建线程详解

moboyou 2025-06-05 16:50 29 浏览

多线程的方式能够在操作系统的多核配置上更好的利用服务器的多个CPU的资源,这样的操作可以使得程序运行起来更加高效。Java中多线程机制提供了在一个进程内并发去执行多个线程,并且每个线程都并行的去执行属于线程处理的自己的任务,这样可以提高程序的执行效率,让系统资源得到更加的高效的利用。

Java线程中线程的创建方式

Java多线程中创建线程的方式有以下四种

  • 1、继承Thread类
  • 2、实现Runnable接口
  • 3、通过ExecutorService和Callable<Class>实现有返回值的线程操作
  • 4、基于线程池实现

继承Thread类

Thread类自己也是实现了Runnbale接口并且定义了操作线程的方法,通过继承Thread类的方式来创建一个线程。如下所示

public TestThread extends Thread{
		 public void run(){
     
     }
}

public class Test{
	public static void main(String[] args){
  		TestThread testThread = new TestThread();
    	testThread.start();
  }

}	

首先创建一个类并且继承了Thread接口,然后实例化线程对象并且调用其start()方法来启动线程。start方法是一个native方法,通过在操作系统上启动一个新线程,并且最终执行run方法来启动一个线程。run方法的内部是线程具体的实现代码。

实现Runnble接口

基于Java编程规范,如果子类已经继承了一个类,那么就没有办法直接继承Thread类了,因为Java是单继承的方式。这个时候就可以通过实现Runnbale接口创建线程。

public class ChildTestClass extends SuperClass implements Runnable{
		public void run(){
    
    }
}

ChildTestClass childTestClass = new ChildTestClass();
Thread thread = new Thread(childTestClass);
thread.start();

通过实现Runnbale接口创建了一个ChildTestClass线程类,并且创建了对应的线程类对象,创建一个Thread的类并且以该对象作为参数传入,并且使用Thread 的start()方法启动线程执行run()方法中的执行逻辑

通过ExecutorService和Callable<Class>实现有返回值的线程

在实际开发中,会有这样一个场景,我们在主线程中开启了很多子线程,然后执行不同的处理任务,然后需要收集到各个子线程的返回结果,并且将结果进行汇总,这个时候就需要使用到Callable接口来进行操作。

具体的实现方法如下

public class MyCallable implements Callable<String>{
	private String name;
  // 通过构造函数传入参数作为线程的名称
  public MyCallable(String name){
  	this.name = name;
  }
	// call方法内为线程实现的逻辑处理操作
	@Override
	public String call() throws Exception{
  	return name;
  }
}
// 创建一个固定大小为5的线程池
ExecutorService pool = Executors.newFixedThreadPool(5);

// 创建多个有返回值的任务列表
List<Future> list = new ArrayList<Future>();
for(int i = 0;i<5;i++){
		// 创建一个有返回值的线程实例
  Callable c = new MyCallable(i+"");
  // 提交线程,获取Future对象并将其保存到Future List中
  Future future  = pool.submit(c);
  list.add(future);
 
}

//关闭线程池,等待线程执行结束
pool.shutdown();
// 遍历获取运行结果
for(Future future:list){
		future.get();
}

创建一个类并且实现Callable接口,在call方法中实现了具体的运算逻辑并且返回结算结果。具体的调用过程是,创建一个线程池、一个用于接收返回结果的Future List 以及Callable线程实例,使用线程池提交具体的任务进行执行,之后将结果保存到Future中,在执行完成之后遍历Future List中的Future对象,并且调用future对象的get方法就可以获取Callable线程任务返回具体的操作结果并且进行主线程处理。

基于线程池

线程作为一种计算资源,但是每次的创建和销毁都会浪费很多的其他资源,这个时候线程池的出现就是一种很好的资源管理策略。那么如何通过线程池来创建线程呢!

ExecutorService  threadPool = Executors.newFixedThreadPool(10);

for(int i = 0;i<10;i++){
	   threadPool.execute(new Runnable(){
    					@Override
              public void run(){
     
     					}                    
    })
}

相关推荐

Linux集群自动化监控系统Zabbix集群搭建到实战

自动化监控系统Cacti特点:将监控到的数据,绘制成各种图形基于SNMP协议(网络管理协议)的监控软件,强大的绘图能力Nagios特点:状态检查和报警机制(例如:内存不足或CPU负载高时,及时的...

快速掌握Kafka系列《三》配置项总结

往期系列文章:1.快速掌握Kafka系列《一》基本概念入门2.快速掌握Kafka系列《二》常用操作命令汇总目录一、前言二、broker配置2.1三个基本配置2.2其它配置2.3...

8.mxGraph 命名空间与 Hello World 示例实践.md

2.2.2GeneralJavaScriptDevelopment常规JavaScript开发2.2.2.1JavaScriptObfuscation/JavaScript混淆[翻...

英特尔 i9-12900KS 最新爆料:基础功耗 150W,790 美元

IT之家2月14日消息,据爆料者@momomo_us的消息,现在已有海外经销商列出了i9-12900KS的商品信息。i9-12900KS的产品代码为BX8071512900KS,基...

Spring Boot集成OAuth2:实现安全认证与授权的详细指南

SpringBoot集成OAuth2:实现安全认证与授权的详细指南引言在当今数字化时代,Web应用的安全认证和授权至关重要。OAuth2作为一种广泛应用的开放标准协议,为第三方应用提供了安全、便捷的...

DNF人造神团本男气功加点攻略(dnf男气功用什么神话)

SP方面:加点从下往上点起,大技能全部点满,剩余sp在雷霆踏和念雷轰之间根据个人喜好二选一。加点代码:eJwNzTEKglAAx+Hf35D0pU8bImxpkSgHt47QFNRSi2cIkkJ...

Python连接Mysql数据库的几种方式以及问题排查方法

一、使用pymysql连接Mysql数据库连接示例:conn=pymysql.connect(host=host,user=user,password=passwd,db=db,port=int(...

37【源码】数据可视化:基于 Echarts + Python 动态实时大屏

效果图展示1.动态效果演示2.静态切片效果图一、确定需求方案1.确定产品上线部署的屏幕LED分辨率本案例基于16:9屏宽比,F11全屏显示。2.部署方式浏览器打开播放,Chrome浏览器、360浏览...

36【源码】数据可视化:基于 Echarts + Python 动态实时大屏

效果图展示动态效果演示2.静态切片效果图一、确定需求方案1.确定产品上线部署的屏幕LED分辨率本案例于16:9屏宽比,F11全屏显示。2.部署方式浏览器打开播放,Chrome浏览器、360浏览器等。...

Jsp Servlet Mysql实现的在线商城项目源码附带视频指导运行教程

今天给大家演示一款由jspservletMySQL实现的在线商城系统,系统项目源码在【猿来入此】获取!本系统实现了管理员管理用户、商品(商品分类)、订单、留言、新闻等功能,前台会员注册登录,查看商...

MySQL大数据表处理策略,原来一直都用错了……

场景当我们业务数据库表中的数据越来越多,如果你也和我遇到了以下类似场景,那让我们一起来解决这个问题。数据的插入,查询时长较长后续业务需求的扩展,在表中新增字段,影响较大表中的数据并不是所有的都为有效数...

基于SpringBoot 的CMS系统,拿去开发企业官网真香(附源码)

前言推荐这个项目是因为使用手册部署手册非常完善,项目也有开发教程视频对小白非常贴心,接私活可以直接拿去二开非常舒服开源说明系统100%开源模块化开发模式,铭飞所开发的模块都发布到了maven中央库。可...

「Qt入门第22篇」 数据库(二)编译MySQL数据库驱动

导语在上一节的末尾我们已经看到,现在可用的数据库驱动只有两类3种,那么怎样使用其他的数据库呢?在Qt中,我们需要自己编译其他数据库驱动的源码,然后当做插件来使用。下面就以现在比较流行的MySQL数据库...

基于SpringBoot从0到1编写一个图书管理系统(附源码)

项目源码地址:https://muzidong.com/productDetail/8ff44c71db6b4b6aa30c71e646b1c557需求分析基于SSM+MySql+LayUI...

Jsp+Ssm+Mysql实现的投票管理系统源码附带视频指导配置运行教程

今天给大家演示的是一款由jsp+ssm框架+mysql实现的投票管理系统,系统分为前端和后台管理模块,系统项目源码在【猿来入此】获取!前端用户可以登录注册、查看投票信息,登录后可以进行投票,也可以查看...