java多线程

本文深入探讨了进程与线程的概念,详细讲解了多线程的优势与挑战,包括资源竞争、程序紊乱等问题,并提供了多线程的实现方法,如通过继承Thread类或实现Runnable接口。此外,还介绍了线程的生命周期、优先级设置、调度方法及线程同步的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程:

应用程序的运行实例,是资源分配调度的基本单位。

线程:

进程中的执行单位,是cpu时间片的调度使用单位。

多线程

在同一时间执行多个任务的功能,即多线程。

多线程的优缺点

优势:

  • 可以同时完成多个任务,提高CPU利用率。
  • 多任务并发执行,速度更快。
  • 可以随时停止任务,并设置任务优先级以优化程序性能。

缺点:

  • 多线程间存在着竞争资源,比如文件、表中的一行数据、 内存空间,对资源的并发访问可能造成程序紊乱。(应对共享资源访问应进行同步或控制)
  • 特殊情况下,程序的整体运行速度会减慢。
  • 代码复杂度较高

多线程的实现方式

类继承java.lang.Thead 并重写run()方法

class MyThread extends Thread{
	public void run(){
	
	}
}

类实现java.lang.Runnable 并重写run()方法

    class MyThread implements Thread{
	public void run(){
	
	}
}

启动线程

MyThread  t = new MyThread (); t.start();

在这里插入图片描述

线程的生命周期

在这里插入图片描述

线程优先级

setPriority(int grade)
grade 的参数值

  • Thread.MIN_PRIORITY=1
  • Thread.MAX_PRIORITY=10
  • Thread.NORM_PRIORITY=5
  • 数字越大优先级越高
    例如:
    Dog dog = new Dog();
    dog.setPriority(Thread.MAX_PRIORITY) //dog.setPriority(10)

线程调度方法

join()
阻塞当前线程,强行介入执行。夺取时间片,自己执行

在这里插入图片描述

sleep():

使线程停止运行一段时间,此时将处于阻塞状态
调用方法 Thread.sleep();

yield() :

出让时间片,但不会阻塞线程,转入可运行状态
调用方法 Thread.yieid()

在这里插入图片描述

多线程条件的问题

线程同步问题

线程同步的必要性
当多个线程访问同一个数据时,容易出现线程安 全问题。需要进行线程同步,以保证数据安全。
线程同步
当两个或两个以上线程访问同一资源时,需要某种方式来确保资 源在某一时刻只被一个线程使用
线程同步的实现方案

  • 同步代码块
  • 同步方法

同步代码块
同步代码块同一时间只可以有唯一的一个线程可以执行
具体语法

 private static Object Lock = new Object();//锁的类型无要求,但是需要new 还要求唯一
 synchronized(lock){
 		同步代码块
 }

同步方法
访问修饰符 synchronized 返回类型 方法名{ }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值