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

孝感网站的建设店面设计说明

孝感网站的建设,店面设计说明,免费小程序网站,济南营销型网站建设目录 前言#xff1a; 1.什么是线程 2.为什么要有线程 3.进程与线程的区别与联系 4.Java的线程和操作系统线程的关系 5.多线程编程示例 6.创建线程 6.1继承Thread类 6.2实现Runnable接口 6.3继承Thread#xff0c;使用匿名内部类 6.4实现Runnable接口#xff0c;使…目录 前言 1.什么是线程 2.为什么要有线程 3.进程与线程的区别与联系 4.Java的线程和操作系统线程的关系 5.多线程编程示例 6.创建线程 6.1继承Thread类 6.2实现Runnable接口 6.3继承Thread使用匿名内部类 6.4实现Runnable接口使用匿名内部类 6.5lambda表达式创建Runnable子类对象 7.Thread类及常见的方法 7.1Thread中常见的构造方法 7.2Thread的几个常见属性 结束语 前言 这节中小编就来和大家聊一聊多线程是什么以及需要我们掌握多线程程序的编写、多线程的状态、什么是线程不安全及解决思路以及掌握synchronized、volatile关键字。在上节博客中给大家讲到了进程和进程管理我们讲解了为什么要使用调度CPU的按照并发的方式来执行进程的在PCB中也提供了一些属性里面有进程的优先级、进程的状态、进程的上下文、进程的记账信息......也给大家讲解了引入进程的目的就是为了能够实现多个任务并发执行的效果。接下来小编就给大家讲解一下什么是线程线程与进程之间又有什么联系。 1.什么是线程 一个线程就是一个“执行流”每个线程之间都可以按照顺序执行自己的代码多个线程之间“同时”执行着多份代码。 2.为什么要有线程 首先“并发编程”称为“刚需”。 单核CPU的发展遇到了瓶颈要想提高算力就需要多核CPU而并发编程能够更充分利用多核CPU资源。有些任务场景需要“等待IO”为了让等待IO的时间能够去做一些其他的工作也需要用到并发编程。  其次虽然多进程也能实现并发编程但是是线程比进程更轻量。 创建线程比创建进程更快。销毁线程比销毁进程更快。调度线程比调度进程更快。 最后线程虽然比进程轻量但是人们还不满足于是又有了“线程池”和“协程”。 有关于线程池的话题我们后面在介绍关于协程的话题这里我们不做过多的讨论。 3.进程与线程的区别与联系 进程有一个重大的问题就是比较重量如频繁的创建/销毁进程成本会比较高。 所以我们又引出了线程的概念。那么线程与进程之间到底有什么联系和区别呢我们接着往下看。 进程是包含线程的。每一个进程至少有一个线程存在即主线程。一个进程里可以有一个线程也可以有多个线程每个线程之间都是一个独立存在的执行流多个线程之间也是并发执行的。这里注意多个线程可能是在多个CPU核心上同时运行也可能是在一个CPU核心上通过快速调度并发运行。操作系统真正的调度是在调度线程而不是在调度进程。 注意线程是操作系统调度运行的基本单位进程是操作系统资源分配的基本单位 一个进程中的多个线程之间共用一份系统资源。 内存空间。文件描述符表。 注意只有在进程启动的时候创建第一个线程的时候需要花成本去申请系统资源。一旦进程第一个线程创建完毕此时后续再创建线程就不必在申请资源了这样创建和销毁的效率就会大大提高。 下面小编给大家举个例子方便大家更好的理解进程与线程。 所以通过上述的例子再给大家总结一下进程与线程之间的区别 进程包含线程。进程有自己独立的内存空间和文件描述符表同一个进程中的多个线程之间共享一份地址空间和文件描述符表。进程是操作系统资源分配的基本单位线程是操作系统调度执行的基本单位。进程之间具有独立性一个进程挂了不会影响其他进程同一个进程里的多个线程之间一个线程挂了可能会把整个进程带走影响其他进程。 4.Java的线程和操作系统线程的关系 线程是操作系统中的概念操作系统内核实现了线程这样的机制并且对用户层提供了一些API供用户使用。 Java标准库中Thread类可以视为是对操作系统提供的API进行了进一步的抽象和封装。 5.多线程编程示例 上面说了这么多的概念接下来还是带着大家一起在代码中切实的感受一下究竟什么是多线程。 代码展示 package Thread; class MyThread extends Thread{Overridepublic void run() {while (true) {System.out.println(hello t);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}} } public class ThreadDemo1 {public static void main(String[] args) {Thread t new MyThread();//start会创建新的线程。t.start();//run不会创建新的线程。run是在main线程中执行的。//t.run();while (true) {System.out.println(hello main);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}} }结果展示 代码分析 在上述代码中我们看到我们写了一个类MyThread并继承了Thread类在java中标准库提供了一个类Thread它能够表示一个线程。 在继承Thread的时候我们需要对父类中的run()方法进行重写。 在主函数中我们先创建出来了一个MyThread的实例。 Thread t new MyThread(); 紧接着我们就要启动线程。 t.strat(); 在上述代码中我们涉及到了两个线程。 main方法所对应的线程一个进程里面至少有一个线程也可以称为主线程。通过t.strat创建一个新的线程。 结果分析 我们执行代码之后看到的效果是“hello t”和“hello main”是交替打印的但又不是严格意义上的交替打印。按照我之前的单线程的想法如果我们执行main线程中的进入while循环之后由于是死循环那么按照之前的想法应该是出不来的应该是要一值打印“hello main”的但是这里并不是我们想象中的那样而是和另一个线程中的一起交替打印那就说明这里是启动了两个线程两个线程分别独立运行。多线程在CPU上的调度是不确定的是随机的。所以我们看到的就是不规律的交替打印。这也就是我们上述中提到的一个进程中的多个线程并发执行的过程。 同时我们可以借助jak里面的工具jconsole来分析java里的线程。 在下面的路径下找到安装路径然后双击打开运行。 点击线程在下面可以看到很多线程这里你会发现有很多线程这里不只有咱们创建出来的两个。除了标记出来的两个线程之外其他都是JVM自己创建出来的。 描述出了当前这两线程执行到哪里了。 6.创建线程 6.1继承Thread类 我们可以使用Thread重写run方式来创建线程。 代码展示 package Thread; //使用继承Thread重写run方法来创建线程 class MyThread extends Thread{Overridepublic void run() {while (true) {System.out.println(hello t);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}} } public class ThreadDemo1 {public static void main(String[] args) {Thread t new MyThread();//start会创建新的线程。t.start();//run不会创建新的线程。run是在main线程中执行的。//t.run();while (true) {System.out.println(hello main);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}} }结果展示 6.2实现Runnable接口 使用实现Runable重写run。 代码展示 package Thread; //使用Runnable接口来实现线程创建 //1.实现Runnable接口 class MyRunnable implements Runnable{Overridepublic void run() {while (true) {System.out.println(hello t);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}} } public class ThreadDemo2 {public static void main(String[] args) {//2.创建爱你Thread类实例调用Thread的构造方法是将Runnable对象作为target参数。MyRunnable runnable new MyRunnable();Thread t new Thread(runnable);//3.调用start方法。t.start();while (true) {System.out.println(hello main);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}} }结果展示 对比上述两种方法 继承Thread类直接使用this就表示当前线程对象的引用。实现Runnable接口this表示的是MyRunnable的引用需要使用Thread.currentThread() 6.3继承Thread使用匿名内部类 代码展示 package Thread; //继承Thread使用匿名内部类来创建线程 public class ThreadDemo3 {public static void main(String[] args) {Thread t new Thread() {Overridepublic void run() {while (true) {System.out.println(hello t);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}};//启动线程t.start();//主线程while (true) {System.out.println(hello main);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}} }结果展示 6.4实现Runnable接口使用匿名内部类 代码展示 package Thread;public class ThreadDemo4 {public static void main(String[] args) {Thread t new Thread(new Runnable() {Overridepublic void run() {while (true) {System.out.println(hello t);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}});//启动线程t.start();//主线程while (true) {System.out.println(hello main);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}} }结果展示 6.5lambda表达式创建Runnable子类对象 这个也是创建线程最推荐的写法使用lambda表达式也是最直观的简单的写法 前面也给大家讲解过有关于lambda表达式的用法如果还有不会的同学请点击下面的链接先去看看lambda表达式的使用吧http://t.csdn.cn/zEPFB 代码展示 package Thread; //使用lambda表达式来创建线程 public class ThreadDemo5 {public static void main(String[] args) {Thread t new Thread(() - {while (true) {System.out.println(hello t);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}});//启动线程t.start();//主线程while (true) {System.out.println(hello main);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}} }结果展示 7.Thread类及常见的方法 Thread类是JVM用来管理线程的一个类换句话说每个线程都由一个唯一的Thread对象与之关联。Java代码中的Thread对象和操作系统中的线程是一一对应的。 用我们上述的例子来看每个执行流也需要有一个对象来描述类似下图所示而Thread类的对象就是用来描述一个线程执行流的JVM会将这些Thread对象组织起来用于线程调度线程管理。 7.1Thread中常见的构造方法 方法 说明 Thread创建线程对象ThreadRunnable target使用Runnable对象创建线程对象ThreadString name创建线程对象并命名ThreadRunnable targetString name使用Runnable对象创建线程对象并命名ThreadThreadGroup groupRunnable target线程可以被用来分组管理分好的组即为线程组这个目前我们了解即可 代码演示案例 package Thread;public class ThreadDemo6 {public static void main(String[] args) {Thread t new Thread(() - {while (true) {System.out.println(hello t);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}},我的线程);t.start();while (true) {System.out.println(hello main);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}} }结果展示 我们可以看到在上述运行的线程中就会出现自己命名的线程名字。 7.2Thread的几个常见属性 属性获取ID getId()名称 getName() 状态getState()优先级getPriority()是否后台线程isDaemon()是否存活isAlive()是否被中断isInterrupted() 代码展示 package Thread;public class ThreadDemo7 {public static void main(String[] args) {Thread t new Thread(() - { // System.out.println(hello t);},我的线程);t.start();System.out.println(线程ID是 t.getId());System.out.println(线程名称是 t.getName());System.out.println(线程状态是 t.getState());System.out.println(线程优先级是 t.getPriority());System.out.println(线程是否是后台线程 t.isDaemon());System.out.println(线程是否存活 t.isAlive());System.out.println(线程是否被中断 t.isInterrupted());} }结果展示 解释getDaemon true表示是后台线程。后台线程不会阻止java进程结束哪怕后台线程还没有执行完java进程该结束就会结束。false表示是前台线程。前台线程会阻止java进程结束必须得java进程中的所有前台线程都执行完java进程才会结束。 注意创建的线程默认是前台的也可以通过setDaemon修改成后台线程。 解释isAlive: 是描述系统内核里的那个线程是否还存活。线程的入口方法执行完毕此时系统中的对应的线程就没有了此时调用该线程isAlive就是false。 结束语 这节中小编主要是给大家分享了线程了概念、线程与进程之间的区别和联系以及如何创建线程。希望这节对大家学习JavaEE有一定的帮助想要学习的同学记得关注小编和小编一起学习吧如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津在此小编先谢过各位大佬啦
http://www.dnsts.com.cn/news/200934.html

相关文章:

  • 常熟网站建设都找聚尚网络网站建设开发报价明细
  • 网站建设新闻发布体育网站的制作哪里可以做
  • 做购物商城网站设计苏州有哪些it大厂
  • 白云区网站建设mg126电商网站活动推广
  • 各网站的风格及特点做的比较好的法律实务培训网站
  • 莱芜网站建设及优化网络最火的销售平台
  • 石做视频网站需要牌照嘉兴中小企业网站建设
  • 个人网站备案描述wordpress+漂亮的博客
  • 怎样自己建立一个网站电子商务网站营销方案
  • 建设企业网站公司价格上海平台网站建设公
  • 网站建设属于办公费吗wordpress可以做seo吗
  • 有哪些企业网站做的不错甘肃网站建设选哪家
  • 产品网站设计论文短视频素材哪里找
  • 高质量的南昌网站建设秦皇岛网站制作小程序开发
  • wordpress淘宝客建站教程视频规模以上工业企业的标准
  • 自己做网站如何赚钱山东济南网络公司
  • 比如做百度知道 .html,这些都是我们不可控制的网站!类似于wordpress的网站
  • 哪个网站是专门做兼职的广告电话
  • 石家庄自己的网站手表网站
  • 福州市住房和城乡建设网站给公司做网站怎么样
  • 网站主要盈利模式windows优化软件哪个好
  • 可以建设个人网站华为网站建设官网
  • 建设企业网站源码软件商店打不开怎么办
  • 网站服务器重做系统怎么做网页设计师必备软件
  • 公司网站内容如何做网站中队人物介绍怎么做
  • react做的电商网站能上线吗两学一做登录网站
  • 优秀网页设计网站是小型网站建设需要多少钱
  • 崇信网站建设武进网站建设机构
  • 电脑软件下载网站人工智能搭建
  • 网站静态首页模板个人个体工商户查询