IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java 知识点 多线程 Thread -> 正文阅读

[Java知识库]java 知识点 多线程 Thread

程序 : 一组命令的集合,为了完成指定的功能,程序是静态概念,一般保存在硬盘当中

进程 : 正在运行的程序,是一个动态概念,需要保存在内存当中,操作系统会分配对应的PID,当我们直接关闭某个进程的时候,该进行会在运行内存中被销毁

线程 : 一个程序中,不同的执行分支,如果同一个时间节点允许多个线程同时执行的时候,我们称为支持多线程

在Java中,main方法开始执行,就是一个线程,称为主线程

并行 : 多个CPU,同时执行多个任务

并发 : 一个CPU,同时执行多个任务

多线程并行 必须CPU要大于等于2 才行

单核CPU是没有多线程的

优点:

提高应用程序的响应。对图形化界面更有意义,可增强用户体验。

提高计算机系统CPU的利用率

改善程序结构。将既长又复杂的进程分为多个线程,独立运行,利于理解和修改

应用场景:

程序需要同时执行两个或多个任务。

程序需要实现一些需要等待的任务时,如用户输入、文件读写操作、网络操作、搜索等。

需要一些后台运行的程序时。

线程创建:

第一种 ?创建一个类 继承Thread类 并覆写 run方法
?run方法 就是新线程中的main方法

class Processor extends Thread{
	public void run(){
		for(int i=0;i<10;i++){
			System.out.println("测试线程-->"+i);

第二种? 创建一个类 实现Runnable接口 并覆写run方法
?run方法就等于新线程中的main方法

class Processor_01 implements Runnable{
	public void run(){
		for(int i=0;i<10;i++){
		System.out.println("测试线程-->"+i);

?继承和实现的区别

继承Thread:线程代码存放Thread子类run方法中。

实现Runnable:线程代码存在接口的子类的run方法。

实现的好处

避免了单继承的局限性?

多个线程可以共享同一个接口实现类的对象,非常适合多个相同线 程来处理同一份资源。

优先级和常用方法:?

getName:获取线程的名字
setName:设置线程的名字 如果不设置 默认Thread从0开始 依次递增?
setPriority():设置优先级 java中有1-10 ?10个优先级
? ? ? ? ? ? ?MIN_PRIORITY=1
? ? ? ? ? ? ?NORM_PRIORITY=5
? ? ? ? ? ? MAX_PRIORITY=10

getPriority():获取优先级等级
static currentThread():获取当前线程对象
static sleep():让当前线程进入睡眠状态
currentThread和sleep是静态方法 ?意味着和那个对象调用无关
currentThread:出现在哪个线程中 获取哪个线程对象
sleep 出现在哪个线程中 就睡眠哪个线程 参数为long类型的毫秒数 ? ? ? ? ? ?

//创建线程对象
		Thread t1=new Processor();
		//设置名字
		t1.setName("t1");
		//设置是优先级 10
		t1.setPriority(10);
		//设置main的优先级为1
		Thread.currentThread().setPriority(1);
		//启动线程 
		t1.start();

stop:终止某个线程 但是该方法已经过时 不推荐使用 有可能导致死锁
??一般使用标识符解决

public static void main(String[]args){
		Processer_03 p=new Processer_03();
		Thread t1=new Thread(p);
		t1.setName("t1");
		t1.start();
		try{
			Thread.sleep(5000);
			//t1.stop();
			p.flag=true;
		}catch(InterruptedException e){
			e.printStackTrace();
		}
		
	}

}
class Processer_03 implements Runnable{
	//加一个标识  标志是否要终止线程
	boolean flag=false;
	public void run(){
		
		for(int i=0;true;i++){
			//判断是否要终止
			if(flag){
				System.out.println(Thread.currentThread().getName()+"线程已被终止");
				return ;
				

Join 线程合并 让当前线程等待指定线程执行完 在继续执行

Thread t1=new Processer_04();
		t1.setName("t1");
		t1.start();
		//到这里 main就等着t1执行完之后  再继续执行
		t1.join();
		for(int i=0;i<10;i++){
			try{

yield 静态方法 暂停当前正在执行的对象 并执行其他等待中的进程
?静态方法 意味着 跟哪个调用的没有关系 写在哪个进程中 哪个进程就让位
?给同优先级让位 不同优先级不让位

线程同步 当多个线程有可能同时操作同一个数据的时候 为了保证数据一致性 需要进行同步执行
本质是同步数据 是一种安全机制
异步编程 ?线程之间完全独立的 相互没有影响
同步编程 ?线程之间不是完全独立的 ?相互可能有影响
同步的场景 ?必须是多线程 (必须有并发性才有可能出错 )
? ? ? ? 多个线程有可能在同一时间操作 同一个数据的可能性
? ? ? ? 尤其是同时对数据进行更改操作 查询无所谓?

?synchronized(对象){} 成员语句块锁
当访问一个对象中加锁的成员方法或者成员成员语句块锁的时候,则该对象中所有加锁的成员方法和成员语句块锁 全部锁定
synchronized(类名.class){} 静态语句块锁
当访问一个类中,加锁的静态方法或者静态语句块锁的时候,则该对象中所有加锁的静态方法和静态语句块锁 全部锁定

lock 是显示锁,需要手动开启和关闭 ?synchronized是隐式锁,自动开启,执行完自动关闭
lock只有代码块锁 , 而 synchronized支持方法和代码块锁
lock锁,需要JVM花费较少的时间来进行资源调度.性能相对较好,而有很好的扩展性
使用顺序 : Lock锁 ---> 同步代码块锁 ---> 方法锁?

?定时器 计划任务.
只要有一个计划任务 就会开启一个线程 进行计时 ?到达指定时间后 ?由该线程来完成这个任务?

public static void main(String[] args) {
		// 1 要做的事,也就是任务对象
		// 2 什么时候开始做 , 1000*5 就是5秒之后开始
		// 3 间隔时间,每隔多久做一次 1000*3 每3秒执行一次
		Timer t = new Timer();
		t.schedule(new LogTimerTask(), 1000*5,1000*3);
	}
}

// 创建任务
class LogTimerTask extends TimerTask {
	@Override
	public void run() {
		Date date = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String time = sdf.format(date);
		System.out.println(time);

?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-01-25 10:26:52  更:2022-01-25 10:28:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:43:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码