首页 > 编程语言 >Java与线程

Java与线程

时间:2023-12-26 12:03:18浏览次数:30  
标签:状态 Java 用户 线程 内核 等待 轻量级

实现线程的主要方式:

1) 使用内核实现(1:1实现,JDK线程模型采用方式)

内核线程(KLT)就是直接由操作系统内核支持的线程,由内核完成线程切换,内核通过操纵调度器对线程进行调度,并负责将线程的任务映射到各个处理器上.程序一般使用内核线程的一种高级接口-轻量级进程(LWP),由于每个轻量级进程都由一个内核线程支持,只有先支持内核线程才能有轻量级进程.

局限性:由于基于内核线程实现,各种线程操作,如创建,析构和同步,都需要进行系统调用,在用户态和内核态来回切换.其次每个轻量级进程都需要一个内核线程的支持,因此轻量级进程需要消耗一定的内核资源,所以一个系统支持轻量级进程的数量是有限的

2) 使用用户线程实现(1:N实现)

用户线程一般指的是完全建立在用户空间的线程库上,系统内核不能感知到用户线程的存在和实现,用户线程的建立,同步,销毁和调度完全在用户态中完成,不需要内核帮助.

局限性:线程的操作都需要用户线程自己处理,操作系统只将处理器资源分配到进程,"阻塞的处理"和"多处理器系统如何将线程映射到其他处理器上"解决比较困难.

3) 使用用户线程加轻量级进程混合实现(N:M实现)

Java与线程_java 线程

1. 新建(NEW):创建后尚未启动的线程处于这种状态
2. 运行(Runnable):包括操作系统线程状态的Running和Ready,可能正在执行或者等待操作系统分配执行时间
3. 无限期等待(Waiting):处于该状态的线程不会被分配处理器执行时间,需要被其他线程显式唤醒,以下方法会让线程陷入无限期的等待状态:
     1) 没有设置timeout参数的Object::wait()方法
     2) 没有设置timeout参数的Thread::join()方法
     3) LockSupport::park()方法
4.限期等待(Timed Waiting):处于该状态的线程也不会被分配处理器执行时间,无需其他线程显式唤醒,一定时间后由系统自动唤醒,以下方法会让线程陷入限期等待状态:
      1) Thread::sleep()方法
      2) 设置timeout参数的Object::wait()方法
      3) 设置timeout参数的Thread::join()方法
      4) LockSupport::parkNano()方法
      5) LockSupport::partUntil()方法
5. 阻塞(Blocked):线程被阻塞了,阻塞和等待状态的区别在于阻塞状态等待着获取到一个排它锁,这个事件将在另一个线程放弃这个锁的时候发生;等待状态则是在等待一段时间,或者唤醒动作的发生.一般程序等待进入同步区域时,线程将进入这种状态
6.结束(Terminated):已终止线程的线程状态,线程已经结束执行.

Thread的线程栈容量如果不通过-Xss或-XX:ThreadStackSize设置,默认是1MB,此外内核数据结构(Kernel Data Structures)会额外消耗16KB内存.


标签:状态,Java,用户,线程,内核,等待,轻量级
From: https://blog.51cto.com/u_12266412/8981187

相关文章

  • 在 Python 中,​​?:​​​ 符号并不是一个有效的运算符。这个符号在其他一些编程语言
    在Python中,?:符号并不是一个有效的运算符。这个符号在其他一些编程语言中,如JavaScript或C,被称为条件(三元)运算符。然而,在Python中,我们使用if-else表达式来达到相同的目的。例如:x=10y=20print("xisgreater")ifx>yelseprint("yisgreater")在上述代码中,如果......
  • 基于JAVA的汽车售票系统网站
    互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对汽车售票信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力等问题,采用汽车售票网站可以有效管理,使信息管理能够更加......
  • Java多线程:锁机制深入剖析
    在并发编程中,正确地管理资源的访问至关重要。Java提供了多种锁机制来协调多个线程之间对共享资源的访问。本文将深入探讨Java多线程中的锁机制,包括内置锁(synchronized关键字)、显式锁(java.util.concurrent.locks.Lock)以及并发集合(java.util.concurrent)提供的锁机制。1.内置锁(Synchr......
  • JavaWeb - Day11 - 案例 - 员工管理、文件上传、修改员工、配置文件
    01.案例-员工管理-新增员工前面我们已经实现了员工信息的条件分页查询以及删除操作。关于员工管理的功能,还有两个需要实现:新增员工修改员工首先我们先完成"新增员工"的功能开发,再完成"修改员工"的功能开发。而在"新增员工"中,需要添加头像,而头像需要用到"文件上传"技......
  • Java,反射创建对象的两种方式
    跟着孙哥学Spring,b站:https://www.bilibili.com/video/BV185411477k/?spm_id_from=333.337.search-card.all.click在Java中,我们可以使用反射来创建对象。这里有两种主要的方式:1.使用Class.forName().newInstance()方法这种方式是使用默认的无参数构造函数来创建对象。如果......
  • Java第十七课_IO流和线程
    1.IO流序列化publicclassPractice01{publicstaticvoidmain(String[]args)throwsIOException,ClassNotFoundException{//一个数据用变量//多个同类型数据用数组//多个不类型数据用对象//多......
  • docker-compose 快速运行java程序
    1、任意目录新建docker-compose.ymltouchdocker-compose.ymlmdkirconfigtouchconfig/application.yml2、复制jar文件到docker-compose.yml所在目录cp3、修改docker-compose.ymlversion:'3'services:qyweixin_server:image:image:harbor.iotwedora.com:4018......
  • Spring提供的实用纯Java工具类合集
    在SpringFramework里的spring-core核心包里面,有个org.springframework.util里面有不少非常实用的工具类。该工具包里面的工具类虽然是被定义在Spring下面的,但是由于Spring框架目前几乎成了JavaEE实际的标准了,因此我们直接使用也是无妨的,很多时候能够大大的提高我们的生产力。I......
  • JavaScript基础语句和window对象
    ifelse语句varsum=190varyouhuisum//赋予一个容器if(sum>=200){youhuisum=sum-10console.log(111)}else{//如果上面if不满足则都执行else语句......
  • 字符流 字节流 多线程
     字符流和字节流:字符流用于处理字符数据,每次读写一个字符,适用于文本文件。字节流用于处理字节数据,适用于二进制文件。InputStream和OutputStream是字节流的基类。Reader和Writer:Reader和Writer是字符流的抽象基类。它们提供了读写字符数据的方法。Output......