Java入门 之 线程

概述:

  1. 什么是线程?
    os可以同时执行很多任务,这些任务就是进程,每个进程也可以同时执行很多任务,这个任务就是线程。
  2. 为什么要多线程?
    1.线程协作提高效率:例如:经典的打印机例子、多线程下载等
    2.提供某种额外的相关服务:好比手机厂商提供周边产品生产,厂商不可能他能停下当前手机的生产而专注周边生产,所以会新产生一个部门去做周边设备。
    3.性能的提高:内存共享
  3. 创建线程的2种方法
    1.写一个类(继承Thread 并重写run方法),实例化这个类,并调用start()方法。 见 例中的方式一演示
    2.实现了Runnable接口 并实现其中的run方法,这个类 可以当作是Thread类的target。 见 例中的方式二演示
  4. 两种方式的对比:
    1.实现Runnable接口的同时还可以继承其他的类,但是继承Thread之后就不可以再继承了。
    2.target的方式更加灵活,结构更加清晰。
  5. 带返回值的线程 见ThreadCallable类
    Callable 实现方式 和Runnable类似,只不过它具有返回值的功能。
  6. 使用匿名内部类来快速定义一个线程
    优点:快速,简单,直观
    缺点:复用性差,执行体(run方法)代码过长会影响代码可读性。
package com.cxyapi.thread;

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

/** 线程基本知识
 * @author cxy @ www.cxyapi.com
 */
public class ThreadTest
{
	public static void main(String[] args) throws Exception
	{
		//方式一演示
		System.out.println(Thread.currentThread().getName()+":开始");
		for(int i=0;i<3;i++)
		{
			new ThreadObj().start();
		}
		/*
		 * 1.一个继承了Thread,并重写了run方法的类--ThreadObj,具有多线程的功能
		 * 2.实例化ThreadObj并调用start方法开启一个线程。
		 * 3.通过上面的例子我们可以看到main线程(主线程)的执行并不是等待所有线程执行结束才执行的。
		 * 4.我们创建了5个线程,这5个线程的执行互不影响,独立执行。
		 */
		
		//方式二:
		ThreadTarget tt=new ThreadTarget();
		for(int i=0;i<3;i++)
		{
			new Thread(tt,"线程"+(i+1)).start();  //设置target的同时可以直接给线程起名字
		}
		
		//创建一个带返回值的线程
		ThreadCallable tc = new ThreadCallable();
		FutureTask<String> ft=new FutureTask<String>(tc);
		new Thread(ft,"带返回值的线程").start();
		System.out.println(ft.get()); //这里会阻塞线程等待返回值
		
		//一种快捷的方式  匿名内部类
		Thread t1=new Thread(new Runnable()
		{
			@Override
			public void run()
			{
				System.out.println("快捷线程~");
			}
		});
		t1.start();
		
		System.out.println(Thread.currentThread().getName()+":结束");
	}

}

/** 一个继承了Thread,并重写了run方法的类
 * @author cxy @ www.cxyapi.com
 */
class ThreadObj extends Thread
{
	@Override
	public void run()
	{
		super.run();
		System.out.println(Thread.currentThread().getName()+":执行中...");
		try
		{
			this.sleep(1000); //这种方式可以通过this来获得当前的线程
		} catch (InterruptedException e)
		{
			e.printStackTrace();
		}
		System.out.println(Thread.currentThread().getName()+":执行完毕");
	}
}

/** 一个实现了Runnable接口 并实现其中的run方法
 * @author cxy @ www.cxyapi.com
 */
class ThreadTarget implements Runnable
{
	@Override
	public void run()
	{
		System.out.println(Thread.currentThread().getName()+":执行中...");
		try
		{
			Thread.currentThread().sleep(2000);
		} catch (InterruptedException e)
		{
			e.printStackTrace();
		}
		System.out.println(Thread.currentThread().getName()+":执行完毕");
	}
}

/** 一个实现了Callable接口的线程target,它可以返回值
 * 特点一:它能声明异常
 * 特点二:有返回值
 * @author cxy @ www.cxyapi.com
 */
class ThreadCallable implements Callable<String>
{
	@Override
	public String call() throws Exception //特点一
	{
		Thread.currentThread().sleep(5000);
		return Thread.currentThread().getName(); //特点二
	}
}

 

声明:

1.原创文章,转载请标明并加本文连接。

2.文章反映个人愚见,如有异议欢迎讨论指正

3.更多的内容请看我的  个人博客(测试版)

18、Java 线程编程入门 本博客详细介绍了Java线程编程的基础知识,包括线程的概念、创建方法、线程执行的不确定性、生命周期、同步机制以及中断与恢复等操作。同时,还介绍了Java中处理多线程的高级工具,如原子变量、显式锁和线程池等,帮助开发者更好地掌握并发编程技巧。 阅读详情

相关推荐

42、Java集合框架与线程编程入门

本文详细介绍了Java集合框架和线程编程的基础知识。内容涵盖线程的优先级、调度、创建方式以及线程同步机制,包括同步方法和死锁问题的解决方案。同时,还介绍了Java集合框架中的Map接口及其实现类HashMap的使用,以及Collections类提供的常用集合算法。通过实例代码,帮助初学者快速掌握Java线程与集合框架的核心概念和实际应用。

rum55的博客 46

这篇文章就是要让你入门java多线程【多线程入门】

就在前几天,有位朋友私信宜春,说期待出一篇多线程的文章,我当时内心是小鹿乱撞啊....于是这几天茶不思饭不想,好几天深夜皆是辗转反侧,两目深凝,以至于这几天走起路来格外飘飘然~我承认太夸张了,感觉又要被打~。最终还是君意不可违,答应了这位朋友,从这位朋友的头像可以看出来,这位朋友绝bi历经沧桑,对生活无尽的坦然浩对,看透俗世凡尘、世态炎凉、趋炎附势,拥有着极高的安心恬荡情怀...啥?啥子?这个是系统默认头像....那个那个宜春啥都没说哈,别把什么事都扯宜春身上,我啥都没说。。。。

宜春 1万+

别再花钱买插件了!手把手教你实现UE5运行时动态导入FBX模型(附完整源码解析)

本文详细解析了UE5运行时动态导入FBX模型的全过程,从FBX SDK集成配置到核心解析流程,再到引擎资源转换和性能优化。通过多线程加载架构和内存优化技巧,开发者可以高效实现动态模型导入,避免购买昂贵插件。文章还提供了完整源码解析和高级功能扩展,帮助开发者深入理解UE5的底层资源管理机制。

weixin_27033895的博客 376

Java多线程入门

线程是程序执行流的最小单元,是 CPU 调度和分派的基本单位。一个进程可以包含多个线程。往底层一点说,线程是CPU和内存之间提取代码的一个通道本文介绍了 Java 多线程的基础知识,包括线程和多线程的概念、创建线程的方式以及线程同步等内容。通过学习这些基础知识,你可以开始编写简单的多线程程序。在实际开发中,多线程编程还涉及到更多的高级知识,如线程池、并发集合等,需要进一步深入学习。

2401_86909484的博客 871

预处理详解(三)—— 命令行定义 + 条件编译 + 文件包含

文章目录前言 前言

2021dragon的博客 2185

FPGA开发者必看:如何用SATA3.0主机控制器IP实现高速存储扩展(附Xilinx实测数据)

本文为FPGA开发者提供了基于SATA3.0主机控制器IP核的高速存储方案设计与优化指南。通过详细解析IP核架构、Xilinx FPGA平台集成实战及性能优化技巧,帮助开发者实现接近理论极限的540MB/s数据传输速度。文章还包含常见问题解决方案和高级应用场景拓展,是硬件工程师提升存储性能的必备参考。

weixin_30632089的博客 114

Java多线程编程入门教程

Java多线程编程入门教程

JianganGuying的专栏 253

ArcGIS中的Python入门知识点整理

关于Arcpy大家应该都比较熟悉,Python用的好,数据处理快又好!在ArcGIS中ArcPy是一个以成功的arcgisscripting模块为基础并继承了arcgisscripting功能进而构建而成的站点包。目的是为以实用高效的方式通过Python执行地理数据分析、数据转换、数据管理和地图自动化创建基础。ArcPy提供了丰富纯正的Python体验,具有代码自动完成功能。今天我们就看看关于Arcpy相关处理的使用,通过一些简单代码与大家一起认识Arcpy。

xjt921122的博客 1769

Java多线程入门指南

Java 作为一种有强大异步支持能力的语言,大量使用于需要同时处理多件任务的场景。本文介绍 Java 多线程的基本概念,以及常见的一些缺陷。

xxiaobaibaibai的博客 1188

高效与灵活相结合:Verilog编写的跨时钟域循环缓冲控制器解析

循环缓冲区,也被称作循环队列、环形缓冲区,是一种数据结构,其主要特性是使用一个固定大小的缓冲区作为数据的存储空间,这个缓冲区在逻辑上被视作是首尾相接的。虽然Verilog是一种常用的硬件描述语言,被广泛应用在FPGA和ASIC设计中,但是在描述循环缓冲区时,它并没有提供一种直接且灵活的方式来指定循环缓冲区的参数,如字长、缓冲区深度、缓冲区数量等。这给硬件设计带来了一定的不便。同时,该控制器的设计也充分考虑了硬件资源的利用率,通过优化的算法和数据结构,使得在实现高性能的同时,也能够有效地节省硬件资源。

qq_38334677的博客 1219

你知道吗?其实这些都是AI——农作物监控AI

随着全球人口的不断增长,粮食需求日益增加。为了应对这一挑战,现代农业正在迅速转型,引入了许多先进技术来提高生产效率和作物产量。在这些技术中,人工智能(AI)在农作物监控方面的应用显得尤为重要。通过利用AI技术,农民和农业专家可以更好地管理农作物的生长,预防病虫害,并优化灌溉和施肥方案,从而实现农业生产的智能化和精准化。

AI科研社 365

Java中多线程,zookeeper入门书籍

定义一个类继承 Thread 类 重写 run 方法 创建子类对象,即创建线程对象 调用 star 方法,开启线程并让线程执行,同时还会告诉 JVM 去调用 run 方法 自定义线程类: public class myThread extends Thread { //重写run方法,完成该线程执行的逻辑 public void run() { for(int i = 0;i < 50;i++) { System.out.println(“新线程正在执行” + i); } } } ..

m0_64867092的博客 221

RK3568平台开发系列讲解(DMA篇)DMA engine使用

DMA传输属于异步传输,在启动传输之前,slave driver需要将此次传输的一些信息(例如src/dst的buffer、传输的方向等)提交给dma engine(本质上是dma controller driver),dma engine确认okay后,返回一个描述符(由struct dma_async_tx_descriptor抽象)。DMA_PREP_PQ_DISABLE_P、DMA_PREP_PQ_DISABLE_Q、DMA_PREP_CONTINUE,PQ有关的操作,TODO。

内核笔记 1718

多线程(三)Java多线程入门

Java多线程入门

想握住此生辽阔 177

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java 线程入门

线程概念、线程创建、线程常用方法、Synchronized

每篇博客都不是最终版,都会随着我的学习更新 1025

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java线程池从入门到精通:0到1的实战指南

线程池是Java并发编程中的重要工具,通过合理配置线程池的参数,可以有效管理线程资源,提高程序的性能和响应速度。希望本文的示例和讲解对您有所帮助,如果您在使用线程池时有任何疑问,欢迎随时交流探讨!

C_V_Better的博客 425

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java从入门到精通十二(java线程)

Java从入门到精通十二(java线程)什么是线程(thread)?二级目录三级目录 什么是线程(thread)? 二级目录 三级目录

jgdabc的博客 2015

java线程入门_Java线程入门

在学习java线程编程前,我们需要了解线程的概率,区分线程和进程的区别,最后介绍java中创建线程的两种方式。下面将逐一带你来了解这些基础知识什么是进程?进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是...

weixin_39713219的博客 150

Java零基础入门笔记:多线程

本笔记是学习狂神的java教程,建议配合视频,学习体验更佳。

sherlockMa的博客 1008

Java 线程编程:从入门到精通

Java 使用“虚拟线程”模型(Virtual Thread Model),它将线程的管理交给 JVM 和操作系统。线程(Thread)是操作系统分配的最小执行单元,它可以看作是 CPU 执行的一个“小任务”。一个进程(Process)可以包含多个线程,这些线程可以并发执行不同的任务。希望通过这篇文章,你对 Java 线程有了全面的理解!守护线程(Daemon Thread)是一种特殊的线程,它会在所有用户线程结束后自动终止。线程池可以复用线程,避免频繁创建和销毁线程带来的开销。接口没有继承关系的限制。

Leaton的博客 895

Java线程池入门

线程池基础 什么是线程池 为什么使用线程池 使用线程池有哪些优势 线程池的使用 Java内置线程池 内置线程池是一个叫做ThreadPoolExecutor的一个类我们来看看它的构造方法 参数详解 流程图 参数设计 这里稍微用个人理解去解释一下,核心线程数说白了就是在80%的情况下能够处理系统任务的线程数量,任务队列长度的设计核心线程数量/单个任务执行时间*2 说白了就是单位时间内可以执行的任务数量2,其实对应的就是上面的80%情况下系统任务数量2 然后最大线程数量,

cuitldlsn的博客 2086

JAVA入门——多线程

ThreadPoolExecutor对象重点考虑七个参数1.核心线程数量(不能小于0)2.线程池中最大线程数量3.空闲时间(值)4.空闲时间(单位)要用TimeUnit指定5.阻塞队列(不能为null)6.创建线程的方式(不能为null)7.执行的任务过多时的解决方案(不能为null)在ThreadPoolExecutor的静态内部类AbortPolicy中。

2301_80216298的博客 658

Java多线程从入门到精通

是指运行中的程序。比如我们使用浏览器,需要启动这个程序,操作系统会给这个程序分配一定的资源(占用内存资源)。是CPU调度的基本单位,每个线程执行的都是某一个进程的代码的某个片段。

云想衣裳花想容,春风拂槛露华浓 987

java(多线程入门)

学习一下入门级的多线程 学习多线程,先了解什么叫线程,什么叫进程 一般我们运行的程序都是进程级的,就是运行一个进程的意思,进程之下还有一群小弟叫线程,多个进程可以同时运作,多个线程也可以,但是一般我们只认识大哥,就是进程,所以用户一般不纠结这个,但是开发人员就不一样了,得知道,一个进程其实内部还有若干个线程,一般最少会有一个主线程,在java里对应的是main方法开启的main线程,这一段要强调的...

awei的blog 3148
上一篇: Java入门 之 static
下一篇: Java OO 知识总结
snkcxy
博客等级 码龄19年 0粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值