当前位置: 首页 > news >正文

一个网站有哪些优势海南公共招聘网

一个网站有哪些优势,海南公共招聘网,成都招聘网站建设,高端网站建设公司哪家公司好java 并发线程相关 线程状态 新建(NEW): 创建后尚未启动。可运行(RUNABLE): 正在 Java 虚拟机中运行。但是在操作系统层面,它可能处于运行状态,也可能等待资源调度(例如处理器资源),资源调度完成就进入运行状态。所以该状态的可运行是指可以被运行,具体有没有运行要看底层…

java 并发线程相关

线程状态

avatar

  • 新建(NEW): 创建后尚未启动。
  • 可运行(RUNABLE): 正在 Java 虚拟机中运行。但是在操作系统层面,它可能处于运行状态,也可能等待资源调度(例如处理器资源),资源调度完成就进入运行状态。所以该状态的可运行是指可以被运行,具体有没有运行要看底层操作系统的资源调度。
  • 阻塞(BLOCKED): 请求获取 monitor lock 从而进入 synchronized 函数或者代码块,但是其它线程已经占用了该 monitor lock,所以出于阻塞状态。要结束该状态进入从而 RUNABLE 需要其他线程释放 monitor lock。
  • 无限期等待(WAITING): 等待其它线程显式地唤醒。
    • 阻塞和等待的区别在于,阻塞是被动的,它是在等待获取 monitor lock。而等待是主动的,通过调用 Object.wait() 等方法进入。
进入方法退出方法
没有设置 Timeout 参数的 Object.wait() 方法Object.notify() / Object.notifyAll()
没有设置 Timeout 参数的 Thread.join() 方法被调用的线程执行完毕
LockSupport.park() 方法LockSupport.unpark(Thread)
  • 限期等待(TIMED_WAITING): 无需等待其它线程显式地唤醒,在一定时间之后会被系统自动唤醒。
    • 调用 Thread.sleep() 方法使线程进入限期等待状态时,常常用“使一个线程睡眠”进行描述。调用 Object.wait() 方法使线程进入限期等待或者无限期等待时,常常用“挂起一个线程”进行描述。睡眠和挂起是用来描述行为,而阻塞和等待用来描述状态。
进入方法退出方法
Thread.sleep() 方法时间结束
设置了 Timeout 参数的 Object.wait() 方法时间结束 / Object.notify() / Object.notifyAll()
设置了 Timeout 参数的 Thread.join() 方法时间结束 / 被调用的线程执行完毕
LockSupport.parkNanos() 方法LockSupport.unpark(Thread)
LockSupport.parkUntil() 方法LockSupport.unpark(Thread)
  • 死亡(TERMINATED): 可以是线程结束任务之后自己结束,或者产生了异常而结束。

线程方法与状态切换

sleep 导致当前线程休眠,与 wait 方法不同的是 sleep 不会释放当前占有的锁,sleep(long)会导致线程进入 TIMED-WATING 状态,而 wait()方法会导致当前线程进入 WATING 状态

wait 方法,主动让出锁。

  1. 不带时间常数的wait 方法进入WAITING状态。
  2. 带时间常数的wait 进入TIME-WAITING状态。

yield 方法,线程让步。 yield 会使当前线程让出 CPU 执行时间片,与其他线程一起重新竞争 CPU 时间片。一般情况下,优先级高的线程有更大的可能性成功竞争得到 CPU 时间片

join方法,当前线程转为阻塞状态,等到另一个线程结束,当前线程再由阻塞状态变为就绪状态,等待 cpu 的宠幸。

join方法可用于多线程的协作,如主子线程的协作,主线程等待子线程完成任务。
join 方法的状态转换与wait方法相同,带时间的进入TIME-WAITING状态,不带时间的进入WAITING状态。

System.out.println(Thread.currentThread().getName() + "线程运行开始!");
Thread6 thread1 = new Thread6();
thread1.setName("线程 B");
thread1.join();
System.out.println("这时 thread1 执行完毕之后才能执行主线程");

创建一个线程的开销

JVM 在背后帮我们做了哪些事情:

  1. 它为一个线程栈分配内存,该栈为每个线程方法调用保存一个栈帧
  2. 每一栈帧由一个局部变量数组、返回值、操作数堆栈和常量池组成
  3. 一些支持本机方法的 jvm 也会分配一个本机堆栈
  4. 每个线程获得一个程序计数器,告诉它当前处理器执行的指令是什么
  5. 系统创建一个与Java线程对应的本机线程
  6. 将与线程相关的描述符添加到JVM内部数据结构中
  7. 线程共享堆和方法区域

用数据来说明创建一个线程(即便不干什么)需要多大空间呢?
答案是大约 1M 左右。java -XX:+UnlockDiagnosticVMOptions -XX:NativeMemoryTracking=summary -XX:+PrintNMTStatistics -version
用 Java8 的测试结果,19个线程,预留和提交的大概都是19000+KB,平均每个线程大概需要 1M 左右的大小

avatar

创建线程的方式

  • callable 接口继承: 可以获取线程的返回值。
http://www.bjxfkj.com.cn/article/108477.html

相关文章:

  • 网站设计流程大致分为几个阶段dw做网站简单首页
  • zencart网站打不开计算机考试网页制作怎么做
  • 织梦做的网站怎么传到网上大连连城传媒
  • 做网站的开发心得百度明星人气榜入口
  • 门户网站制作定制推荐佛山企业网站建设
  • 建一个大网站需要的时间微信官网手机版
  • 在自己电脑上建设网站北京比较好的网站开发公司
  • 数据分析对网站建设的重要性汕头澄海玩具
  • 2019年开公司做网站可以吗wordpress收集客户插件
  • 三亚做网站哪家好html做网站步骤
  • 网站设计优秀作品上海网页设计师培训班
  • 济南网站制做asp 网站开发 软件
  • 网站自助建站开发制作wordpress抖音插件
  • php企业网站开发重庆开网站
  • 网站微信链接怎么做的微网站预约网站开发
  • 自己建网站需要什么软件电子商务网站开发技术论文
  • wordpress音乐网站当阳网站建设
  • 安徽建设学校官方网站网站蜘蛛来访记录
  • 深圳网站搭建专业公司怎么修改网站标题关键词描述
  • 营销型网站建设的特点表现中小型网站建设哪家好
  • 拿自己爱人做网站用struts2框架做的网站
  • 网站做优化效果怎么样网站的首页设计方案
  • 前段模板网站合肥建设网站查询系统
  • 新余 网站建设公司酒店网站建设报价详情
  • 海口哪里做网站企业网站与网络营销
  • 网站跟换域名精准客源app
  • 网站是怎么被挂马微信店铺怎么开
  • 毕节市生态文明建设网站驻马店市可以做网站的公司
  • 网站留言发送到qq邮箱企业建站个人建站源码
  • 淘宝客网站备案信息网站建设crm