首页 > 其他分享 >线程

线程

时间:2023-05-30 17:36:07浏览次数:24  
标签:join Thread 线程 run 方法 wait

线程的创建方式

1、实现Runnable

Runnable规定的方法是run(),无返回值,无法抛出异常 实现Callable

2、Callable规定的方法是call(),任务执行后有返回值,可以抛出异常

3、继承Thread类创建多线程

继承java.lang.Thread类,重写Thread类的run()方法,在run()方法中实现运行在线程上的代码,调用start()方法开启线程。 Thread 类本质上是实现了 Runnable 接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过 Thread 类的 start()实例方法。start()方法是一个 native 方法,它将启动一个新线程,并执行 run()方法 通过线程池创建线程. 线程和数据库连接这些资源都是非常宝贵的资源。那么每次需要的时候创建,不需要的时候销毁,是非常浪费资源的。那么我们就可以使用缓存的策略,也就是使用线程池。

wait和Sleep的区别

sleep                                     wait

不释放锁对象                        释放锁对象,需要notify进行唤醒

在任何地方                            同步方法,同步代码块

必须捕获异常                        不要捕获异常

线程和进程

线程                                                                                                             进程

系统运行的基本单位,程序执行的最小单位                                          系统资源分配和调度的基本单位

线程状态

新建         就绪             运行         阻塞        销毁

synchronized和Lock的区别

synchronized                                                                   lock

主动释放锁                                                                  final里面进行强制释放

不可中断,非公平锁                                                     可以判断,公平锁

少量同步                                                                       大量同步  

独占锁                                                                        公平锁和非公平锁

多线程之间如何通信

1、使用volalite修饰变量,进行变量共享

2、使用wait

线程池参数

1、线程池大小

# 初始连接数
initialSize: 5
# 最小连接池数量
minIdle: 10
# 最大连接池数量
maxActive: 20

2、最大线程数量

3、空闲线程存活时间

4、工作队列

5、线程工厂

线程的拒绝策略

线程自旋锁

自旋锁是一种多线程同步的变量;

使用自旋锁的线程会反复检查锁变量是否可用,如果不可用会一直循环反复检查;

自旋锁不会让出CPU,是一种忙等待状态; 自旋锁是一种死循环等待锁被释放;

 join和yield

join的原理就是wait方法

t.join()表示等待t线程执行完毕后再执行

 

join线程有严格的先后顺序,调用它的线程需要执行完以后其他线程才会跟着执行。

yield是暂停当前正在执行的线程对象,把时间让给其他线程。

使用场合:join线程有严格的先后顺序,yield当前线程占用cpu使用率很高时,把时间让出来。(死循环时)

线程的优先级 线程的优先级就是设置哪个线程优先执行,但也不是绝对的,只是让优先级高的线程优先运行的几率高一些。 线程默认是NORM_PRIORITY = 5; 设置优先级使用的是setPriority()函数。 Tread里面的方法大多数是final进行修饰的,防止继承的时候进行修改

 线程间的相互通信

线程间是通过相互作用,共同完成一个任务当一个线程调用wait方法后便进入等待状态,需要另一线程调用notify()方法对它进行唤醒。

notifyAll可以唤醒所有线程,都必须在synchronized方法或synchronized块里使用

 

 

 

标签:join,Thread,线程,run,方法,wait
From: https://www.cnblogs.com/wyhqmm/p/17443787.html

相关文章

  • 使用powercli 批量多线程 克隆vsphere虚拟机
    $VMS=import-csv-Path'vm001.csv'$Job=$VMS|ForEach-Object-Parallel{#忽略位$Skip=$($_.skip)if($Skip-eq"yes"){continue}#虚拟机名字$VMname=$($_.name)#资源池名字$Resource_Pool=$($_.res_po......
  • gdb调试c++多线程死锁问题初步
    https://blog.csdn.net/zsiming/article/details/126695393 总结:psaux|grepfilename //找出进程IDtop-HpPID //列出进程号为PID下的所有线程gdbatattchPID //用gdb调试正在运行的进程(进程号为PID)(需要sudo权限)threadapplyallbt //这里涉及2个命令:thr......
  • 单例模式简单复杂,线程不安全到安全
    0x01:简介说到单例模式,可以说单例模式是最常见,也是最常用的设计模式了。Spring的bean默认就是单例的。虽然单例模式是最简单的设计模式,但是在实现上有多种方式,分别是饿汉式、懒汉式、双重校验锁;在线程安全方面有线程不安全的,也有线程相对安全的。总的来说实现单例模式有以下一些特......
  • Qt线程简单使用二:QObject~创建任务类
     需求:点击QPushButton按钮,QLabel中的数字,不断累加,一直到999。 做法:点击QPushButton后,启动线程,线程while循环,不断发送累加的数字会主线程,修改QLabel中的数字 其他:一个任务类,可以创建多个任务,写法麻烦一点,视情况决定是否采用这种方法。  主要代码://......
  • 线程池
    线程池1、线程池的7个参数corePoolSize,核心线程数,当新的任务到来时,如果当前核心线程的数量没有>设置的值就新建一个线程执行该任务;否则,就将新任务放入工作队列/等待队列中maximumPoolSize,线程池的最大线程数,当新任务到来时,如果当前线程数量>=maximumPoolSize,执行拒绝......
  • C# 多线程
    什么是线程Thread线程是一个可执行路径,它可以独立于其它线程执行。每个线程都在操作系统的进程(Process)内执行,而操作系统进程提供了程序运行的独立环境。单线程应用,在进程的独立环境里只跑一个线程,所以该线程拥有独占权多线程应用,单个进程中会跑多个线程,它们会共享当前的执行......
  • 进程和线程
    什么是进程?启动一个应用程序,开始运行代码,计算机就要给他分配各种资源,这样就拉起了一个进程,例如:启动jmeter,是启动了一个进程,进程下可以有多个线程,CPU分配时间片,先分给进程,再分给进程下的线程;进程和线程的关系:做个简单的比喻:进程=火车,线程=车厢1、线程在进程下行进(单纯的车......
  • java线程池
    1.JDK中的Executor框架是基于生产者-消费者模式的线程池,提交任务的线程是生产者,执行任务的线程是消费者。Executor线程池可以用于异步任务执行,而且支持很多不同类型任务执行策略,同时为任务提交和任务执行之间的解耦提供了标准方法。Executor线程池支持如下三种线程执行策略:(1).顺序......
  • ABAP 多线程
    Codelistingfor:ZTEST9010Description:12345*&---------------------------------------------------------------------**&ReportZTEST_ASYNC_RFC*&---------------------------------------------------------------------**&*&-----------......
  • Spring中的单例bean是线程安全的吗?
    Spring并没有对单例bean作线程安全的处理,在并发条件下Spring的bean是否是线程安全的有如下两种情况:(1)无状态的bean:没有数据存储能力,例如service类和dao类都是无状态的bean,所以是线程安全的。(2)有状态的bean:有数据存储能力,在并发环境下会发生线程安全问题,需要自行保证线程安全问题,......