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

建设用地规划查询网站上海网站建设优化价格

建设用地规划查询网站,上海网站建设优化价格,wordpress网站乱码,wordpress注册会员收费下载插件Java并发基础理论 进程与线程 进程 ​ 进程是程序的一次执行过程#xff0c;是系统运行程序的基本单位#xff0c;因为进程是动态的。系统运行一个程序就是一个进程从创建运行到消亡的过程。 ​ 我们启动main方法其实就是启动了一个JVM进程#xff0c;而main方法所在的线…Java并发基础理论 进程与线程 进程 ​ 进程是程序的一次执行过程是系统运行程序的基本单位因为进程是动态的。系统运行一个程序就是一个进程从创建运行到消亡的过程。 ​ 我们启动main方法其实就是启动了一个JVM进程而main方法所在的线程就是这个线程中的一个进程也称呼为主进程。 线程 ​ 线程与进程相似但是线程是一个比进程更小的执行单位。一个进程可以在执行过程中产生多个线程线程是多个线程层贡献进程的堆和方法区资源但是每个线程都拥有自己的程序计数器、jvm stack和本地方法栈一个系统产生一个线程或者在各个线程之间切换工作负担要比进程小很多。 线程与进程的关系 ​ 线程是进程划分的更小的运行单位线程和进程最大的不同在于是进程是独立的而各线程则不一定他们会贡献一些资源像堆和元空间。线程执行开销小但是不利于资源的管理和保护而进程正好相反。 程序计数器为什么是私有的 ​ 程序计数器主要有2个作用 字节码解器起通过改变程序计数器一次读取指令从而实现代码的流程的控制如顺序、选择、循环、异常处理。 在多线程的情况下程序计数器用于记录当前线程执行的位置。从而当线程被切换回来的时候能够知道该线程上次执行到哪里了。 例如当一个线程因为实践篇货其他高优先级的线程来了系统就会暂停线程的执行并将控制权转移到另一个线程当这个线程在被调用的时候就会根据程序计数器的值告诉他上次执行到哪里了。 ​ 如果执行的是本natvie方法那么程序计数器记录的就是undefined地址。 所以程序私有主要为了线程切换后能后恢复争取的位置执行 jvm stack和本地方法栈为什么是私有的 ​ jvm stack每个java方法在执行之前会创建一个栈桢用于存储变量标、操作数栈、常量池饮用等信息。才能够方法调用直至执行完毕的过程就对应一个栈桢在jvm stack一个入栈和出栈的过程。 ​ 本地方法栈和虚拟机所发挥的作用非常类似区别是虚拟机栈为执行java方法字节码服务而本地方法栈则为虚拟机使用到的本地方法服务。在HotSpot虚拟机中和java虚拟机合二为一。 堆和方法区 ​ 堆和方法区是所有线程共享的资源其中堆是进程最大的一块内存用来存储新创建的对象。 ​ 方法区主要用于存放已被夹在的类信息、常量、静态变量、即使编译器后的代码等数据。 并发和并行 ​ 并发两个及两个以上的作业在同一时间段内执行。 ​ 并行两个及两个以上的作业在同一时刻执行。 同步和异步的区别 ​ 同步发出一个调用之后在没有得到结果之前该调用就不可以返回一直等待。 ​ 异步调用在发出之后不用等待返回结果该调用直接return 为什么使用多线程 从计算机底层角度来说 ​ 线程可以比作是轻量级的线程是程序执行的最小单位线程间的切换和调度的成本远远小于进程。另外多核CPU时代意味着多个线程可以运行这减少了线程上下文切换的开销。 从互联网发展趋势来说 ​ 现在的系统并发要求很大 而多线程并发编程就是高并发系统的基础这就可以利用好多线程机制可以大大提高系统整体的并发能力和性能。 使用多线程可能带来什么问题 ​ 并发编程的目的就是为了提高程序的执行效率提高程序的速度可能带来的问题有内存泄漏、死锁、线程不安全等等。 如何理解线程安全和不安全 线程安全和不安群啊是对同一份数据的访问是否能达到一致性和正确性 线程的生命周期 Java线程的生命周期有6种状态操作系统层面来看有7种 new初始状态线程创建出来没有调用start方法 READY可运行状态在操作系统角度来看 runnable运行状态线程调用了start等待运行的状态 blocked堵塞状态需要等待锁释放 waiting等待状态表示线程需要等待其他线程做出一些特定的动作。 time_waiting超时等待状态等已在指定的时间后自行返回而不是axingwaiting那样一直等待 terminated终止状态表示线程已经运行完毕。 线程的状态是随着代码的执行在不同状态之间切换的。 ​ 当我们创建线程它属于new状态 调用了start方法就是ready可运行状态可运行状态的线程获得了CPU时间片timeslice后就处于runnning运行状态当线程执行了wait方法就会进入waiting状态进入等待状态需要其他线程通知才能返回到运行状态。如果通过sleep和waitlong mullis方法可以将线程状态编程timed——waiting状态当超时时间结束就会返回runnning状态。当一个线程进入synchhronized的时候如果该方法块已经被其他线程持有锁那么就会进入堵塞状态直到它获取到锁当线程调用wait方法后它会释放持久的锁并且进入等待状态当其他线程notity这个这个线程被唤醒的线程会尝试重新获取锁这个时候就会进入堵塞blocked状态。当鲜橙国之ing晚run方法之后就会进入terminated终止状态 线程的上下文切换 线程在执行过程中会有自己的运行条件和状态也称上下文比如上文所说过的程序计数器栈桢信息等。 ​ 当我们调用sleep和wait主动让出cpu的时候 ​ cpu时间片用完因为操作系统要防止一个线程货进程长时间占用CPU导致其他线程或者进程饿死。 ​ 调用了堵塞类型的系统中断比如请求IO线程被堵塞 ​ 被终止或结束运行。 前三者上下文切换的时候会保留信息线程的上下文信息留着下一次使用的时候恢复现场。 什么是死锁如何避免死锁 线程死锁就是多个线程被堵塞他们中的一个活着全部都在等待某个资源释放由于线程被无限期的堵塞因此程序不可以正常结束。 public class DeadLockDemo {private static Object resource1 new Object();//资源 1private static Object resource2 new Object();//资源 2public static void main(String[] args) {new Thread(() - {synchronized (resource1) {System.out.println(Thread.currentThread() get resource1);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread() waiting get resource2);synchronized (resource2) {System.out.println(Thread.currentThread() get resource2);}}}, 线程 1).start();new Thread(() - {synchronized (resource2) {System.out.println(Thread.currentThread() get resource2);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread() waiting get resource1);synchronized (resource1) {System.out.println(Thread.currentThread() get resource1);}}}, 线程 2).start();} } 如何预防死锁 ​ 我们可以通过一次性申请所有资源和占用部分线程资源的线程如果去申请其他线程如果申请不到就主动释放它占用的资源和按照一定的顺序去申请资源释放的时候就反序列释放 如果避免死锁 ​ 避免死锁就是在资源分配的时候借助算法如银行家算法对资源进行评估、使线程进入安全状态如P1 P2 P3 new Thread(() - {synchronized (resource1) {System.out.println(Thread.currentThread() get resource1);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread() waiting get resource2);synchronized (resource2) {System.out.println(Thread.currentThread() get resource2);}}}, 线程 2).start(); sleep方法和wait方法的区别 他们的共同点都可以暂停线程的执行。 sleep方法没有释放锁而wait释放了锁 wait通常用于线程间的交互 or 通信sleep通常用来暂停执行。 wait方法被调用了不会自动苏醒需要别的线程notify或者notifuAllsleep方法执行完毕后会自动苏醒但是我们也可以给wait方法传递指定的时间在指定的时间后也会苏醒。 sleep是thread类的静态本地方法wait则是Object类的本地方法。 为什么wait方法不定义在Thread wait方法是获得对象锁的线程实现等待会自动释放当前线程占用的对象锁每个对象都拥有对象锁释放锁让让对象锁进入waiting状态自然就是要操作对象的Object而非Thead 为什么sleep不定义在Object中 因为sleep就是让当前线程暂停执行不涉及对象类也不需要获得对象锁。 可以直接调用Thread类的run方法执行吗 答案是可以的如果这么做只会当做一个main线程下的普通方法去执行并不会在某个线程中执行因为new Thread的时候线程就进入了new状态调用start方法就进入了就绪状态分配到时间片就开始运行start会执行线程会执行相应的准备工作然后自动执行run方法这就是真正的多线程工作。
http://www.dnsts.com.cn/news/241400.html

相关文章:

  • 关于志愿者网站开发的论文外贸推广优化公司
  • psd素材免费下载网站用网站空间可以做有后台的网站吗
  • 专业平台建设网站关了吗吐鲁番建设局网站
  • 如何让网站快速收录wordpress插代码
  • 如何做网站搜索排名网站群管理建设
  • 公司网站维护如何做分录修改wordpress后台地址 插件
  • 雅安网站开发关键词优化seo
  • 太原cms建站系统免费100个简历模板
  • 中国矿山建设网站网站建设步骤ppt
  • 烟台汽车租赁网站建设之路网站建设
  • 哪个网站建设公司比较好wordpress权利插件
  • 郑州公共住宅建设投资有限公司网站网站备案查询主办单位性质为个人
  • 做彩票网站网址自己做手机版网站制作
  • 怎么制作博客网站网站开发工具大全
  • 网站维护中手机版网站如何建设
  • 房产智能建站系统社区团购系统开发
  • 廊坊哪里有做网站建设的网站推广优化外包
  • 深圳网站建设智能 乐云践新深圳建设网站哪家最好
  • 云南网站建设多少钱公司怎么在百度做网站
  • 各大网站的域名是什么原因公司官网制作开发
  • 江苏建设教育考试网站哪些公司用.cc做网站
  • 设计规范网站西安网站设计哪家好
  • 潍坊知名网站建设价格东莞网站建设方案
  • 西安移动网站建设wordpress端口不生效
  • 豆瓣网站是怎么建设的百度一下你就知道移动官网
  • 中英文网站案例2022年全球3月解封
  • 商店网站制作互联网站的建设维护营销
  • 网站开发时自适应银座商城官网
  • 做导购网站 商品电商运营能干一辈子吗
  • 网站的国际化 怎么做免费的视频api接口