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

网站建设的业务范围科研网站建设

网站建设的业务范围,科研网站建设,网站ui设计收费,免费网站设计定制#x1f3c6;今日学习目标#xff1a;线程和进程 #x1f603;创作者#xff1a;颜颜yan_ ✨个人主页#xff1a;颜颜yan_的个人主页 ⏰本期期数#xff1a;第三期 #x1f389;专栏系列#xff1a;JAVA 线程和进程前言一、进程与线程1.进程2.线程二、线程的创建2.1 继… 今日学习目标线程和进程 创作者颜颜yan_ ✨个人主页颜颜yan_的个人主页 ⏰本期期数第三期 专栏系列JAVA 线程和进程前言一、进程与线程1.进程2.线程二、线程的创建2.1 继承Thread类创建多线程2.2 实现Runnable接口创建多线程2.3 实现Callable接口创建多线程总结前言 多线程是提升程序性能非常重要的一种方式也是Java 编程中的一项重要技术。在程序设计中多线程就是指一个应用程序中有多条并发执行的线索每条线索都被称作—个线程它们会交替执行彼此可以通信。 一、进程与线程 1.进程 进程(process) 是计算机中程序的一次运行活动是系统进行资源分配和调度的基本单位是操作系统结构的基础。 虽然进程在程序执行时产生但进程并不是程序。程序是“死”的进程是“活”的。程序是指编译好的二进制文件它存放在磁盘上,不占用系统资源是具体的而进程存在于内存中占用系统资源是抽象的。当一次程序执行结束时进程随之消失,进程所用的资源被系统回收。 对计算机用户而言计算机似乎能够同时执行多个进程如听音乐、玩游戏、语音聊天等等都能在同一台计算机上同时进行。但实际上一个单核的 CPU 同一时刻只能处理一个进程用户之所以认为同时会有多个进程在运行是因为计算机系统采用了多道程序设计技术。 所谓多道程序设计是指计算机允许多个相互独立的程序同时进人内存在内存的管理控制之下相互之间穿插运行。多道程序设计必须有硬件基础作为保障。 采用多道程序设计的系统会将 CPU 的周期划分为长度相同的时间片在每个 CPU时间片内只处理一个进程也就是说在多个时间片内系统会让多个进程分时使用 CPU。假如现在内存中只有3个进程A、B、C那么CPU 时间片的分配情况大致如下图。 虽然在同一个时问片中CPU 只能处理一个进程但 CPU 划分的时间片是非常微小的且 CPU 运行速度极快(1 秘可执行约10亿条指令因此在宏观上并发执行多个程序、处理多个进程。 进程对 CPU 的使用权是由操作系统内核分配的操作系统内核必须知道内存中有多少个进程并且知道此时正在使用 CPU 的进程这就要求内核必须能够区分进程并可获取进程的相关属性。 2.线程 通过上述节的介绍可以知道每个运行的程序都是一个进程在一个进程中还可以有多个执行单元同时运行,这些执行单元可以看作程序执行的线程(thread)。每一个进程中都至少存在一个线程。例如当一个Java 程序启动时就会产生一个进程该进程默认创建一个线程这个线程会运行main()方法中的代码。 在程序中代码都是按照调用顺序依次往下执行的没有出现两段程序代码交替运行的效果这样的程序称作单线程程序。如果希望程序中实现多段程序代码交替运行的效果则需要创建多个线程即多线程程序。所谓多线程是指一个进程在执行过程中可以产生多个线程这些线程在运行时是相互独立的它们可以并发执行。多线程程序的执行过程如图 。 图中的多条线程看起来是同时执行的;其实不然图中多线程程序的执行过程它们和进程一样也是由 CPU 轮流执行的只不过 CPU 运行速度很快因此给人同时执行的感觉。 二、线程的创建 Java 提供厂3种多线程的创建方式 1继承 java.lang 包中的 Thread 类重写 Thread 类的run()方法在run()方法中实 现多线程代码。 2实现 java.lang.Runnable 接口在run()方法中实现多线程代码。 3实现 java.util.concurrent.Callable 接口重写 callO方法并使用 Future 接口获取call()方法返回的结果。 2.1 继承Thread类创建多线程 Main类 public class Main {public static void main(String[] args) {MyThread1 myThread new MyThread1(); //创建MyThread1类的实例对象myThread.run(); //调用Mythread1类的run方法while (true){ //死循环输出信息System.out.println(main()方法在运行);}} } MyThread1类 public class MyThread1 {public void run(){while (true){ //死循环输出信息System.out.println(MyThread类的run方法在运行);}} } 运行结果如图 从图中可以看出程序一直打印“My Thread 类的run()方法在运行”这是因为该程序是一个单线程程序。在第一幅图的代码调用 MyThread1 类的run()方法时执行第 MyThread1 类代码定义的死循环因此MyThread 类的 printin 语句将一直执行,而main()方法中的 printin 语句无法得到执行。 如果希望两个while 循环中的println 语句能够并发执行就需要实现多线程。为此Java 提供了线程类 Thread。通过继承 Thread 类并重写 Thread 类中的run()方法便可实现生线程。在Thread 类中提供了 start()方法用于启动新线程。新线程启动后Java虚拟机会自动调用 run()方法如果子类重写了run()方法便会执行子类中的run()方法。 2.2 实现Runnable接口创建多线程 上面通过继承 Thread 类实现了多线程但是这种方式有一定的局限性。因为Java 只支持单继承一个类一旦继承了某个父类,就无法再继承 Thread 类。例如Studert类继承了Person 类,那么Student 类就无法再通过继承 Thread 类创建线程。 为了克服这种弊端Thread 类提供了另一个构造方法——Thread (Runnable target)其中参数类型 Runnable 是一个接口它具有一个run()方法。通过Thread(Runnabiletarget)构造方法创建线程对象时只需为该方法传递一个实现了 Runnable 接口的对象这样,创建的线程将实现 Runnable 接口中的run()方法作为运行代码而不需要调用 Thread类中的run()方法。 下面通过案例演示如何通过实现 Runnable 接口的方式创建多线程如图所示 Main类 public class Main {public static void main(String[] args) {MyThread2 myThread2 new MyThread2(); //创建MyThread2类的实例对象Thread thread new Thread(); // 创建线程对象thread.start(); //开启线程执行线程中的run()方法while (true){System.out.println(main()方法在运行);}} } MyThread2类 public class MyThread2 implements Runnable{public void run() { //线程的代码段当调用start()方法时线程从此开始执行while (true){System.out.println(MyThread类的run()方法在运行);}}} 在代码中代码定义的 MyThreado2 类实现了 Runnable 接口并在中代码中重写了 Runnable 接口中的run()方法。在Main代码通过调用Thread类的构造方法将NyThread2类的实例对象作为参数传入。代码中调用 strar()方法开启新线程执行 MyThread2 关中的代码。而主线程继续执行 main()方法中的代码。 运行结果如图 从图中可以看出来main()和MyThread2类中的run()方法都被执行了说明实现了多线程 2.3 实现Callable接口创建多线程 通过 Thread 类和 Runnable 接口实现多线程时需要重写run()方法但是由于run()f方法没有返回值无法从新线程中获取返回结果。为了解决这个问题Java 提供了Callable接口来满足这种既能创建新线程又有返回值的需求。 通过实现 Callable 接口的方式创建并启动线程的主要步骤如下 1创建 Callable 接口的实现类同时重写 Callable 接口的call()方法。 2创建 Callable 接口的实现类对象。 3通过线程结果处理类 FutureTask 的有参构造方法封装 Callable 接口的实现类 对象。 4调用参数为 FutureTask 类对象的有参构造方法 Thread() 创建 Tbread 线程实例。 5调用线程实例的 start()方法启动线程。 下面通过一个案列演示如何通过买现 Callable 接口的方式来实现多线程如下面文件所示。 Main import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask;public class Main {public static void main(String[] args) throws ExecutionException, InterruptedException {Mythread3 myThread new Mythread3(); //创建Callable接口类的实例对象//使用FuntureTask封装Mythread3类FutureTask ft1 new FutureTask(myThread);//使用Thread(Runnable target,String name)构造方法创建线程对象Thread thread1 new Thread(ft1,thread);//调用线程对象的start()方法启动线程thread1.start();//通过FuntureTaskdioxin的方法管理返回值System.out.println(Thread.currentThread().getName()的返回结果:ft1.get());int a0;while (a5){System.out.println(main()方法在运行);}} }MyThread3类 import java.util.concurrent.*; public class Mythread3 implements Callable {//重写Callable接口中的call()方法public Object call() throws Exception{int i0;while (i5){System.out.println(Thread.currentThread().getName()的call()方法在运行);}return i;} } 在上述文件中在MyThread3类代码定义了一个实现 Callable 接口的实现类并在 Calalble接口中重写了call()方法。在Main中,代码创建了 Callable接口的实例并调用有参的Thread()构造方法创建了线程对象thread1。在代码中调用线程对象 thread1的 start()方法启动线程。 运行结果如图所示: 从图可以看出所示的案例通过实现 Callable 接口的方式实现了多线程开且有返回结果。 Callable 接口方式实现的多线程是通过 Future Task 类来封装和管理返回结果的Future Task 类的直接父接口是RunnableFuture从名称上可以看出 RunnableFuture 是Runnable 和Future的结合体。 总结 以上就是今天的学习内容啦~ 如果有兴趣的话可以订阅专栏持续更新呢~ 咱们下期再见~
http://www.hkea.cn/news/14514218/

相关文章:

  • 潍坊 网站推广个人网站赚广告费
  • 龙井建设局网站文化传媒公司网站建设
  • 小视频网站开发流程图搜索百度指数
  • 如何寻找seo网站建设客户制作手机app开发
  • 怎么用linux做网站佛山微网站建设哪家专业
  • 写作网站投稿赚钱搜索引擎营销实训报告
  • 免费做ppt的网站手机做任务网站有哪些内容
  • 网站初期 权重怎么做建设团队网站
  • 鞍山网站制作谁家好网站的制作公司
  • 手机网站多少钱一个新手做网页用什么软件
  • 网站删除留言板功能删除长宁区网站建设设计话色
  • 佛山网站关键词优化公司优化营商环境评价
  • 网站有什么用wordpress修改邮件地址
  • 备案的域名拿来做别的网站淄博市沂源县建设局网站
  • 哈尔滨模板建站服务商wordpress 响应式幻灯片
  • 大连网页网站制作建立自我追求无我
  • 西宁市城乡规划建设局网站wordpress内链 非插件
  • 普通网站建设163企业邮箱官网
  • 高端建站什么意思河北中瑞建设集团有限公司网站
  • html5网络公司网站模板nginx wordpress 管理
  • asp网站开发pdfwordpress基本
  • 备案 网站内容uncode wordpress主题
  • 网站 云端百度搜索如何去广告
  • 做同城信息网站怎么赚钱网页设计与网站建设的课后习题答案
  • 温州网站建设平台网店出售
  • 免费网站源码产品广告设计
  • 如何快速建立网站wordpress无法选择服务器配置
  • 一个公司做100个网站应用公园app在线制作
  • c sql网站开发品牌设计的意义
  • 厦门企业制作网站方案手机建站平台哪个好