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

凤翔网站开发软文广告经典案例300

凤翔网站开发,软文广告经典案例300,南京驰铭做网站公司,怎么做贷款网站Java多线程进程线程线程的生命周期创建线程线程的优先级线程调度器进程 正在运行中的程序。每个进程都拥有自己(独立)的系统资源、内存空间和地址空间 线程 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中…

Java多线程

  • 进程
  • 线程
    • 线程的生命周期
    • 创建线程
    • 线程的优先级
    • 线程调度器

进程

正在运行中的程序。每个进程都拥有自己(独立)的系统资源、内存空间和地址空间

线程

线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。

线程的生命周期

新建状态(new )、可运行状态(runnable)、运行状态(running )、阻塞状态(blocked)、终止状态(dead)

  1. 当线程处于新建状态的时候,表明此时线程的对象实例已经被创建,但是尚未取得运行线程所需要的资源
  2. 产生了对象的实例之后,一旦调用线程的start()方法,则线程就会进入可运行状态,表明该线程已经获得运行时所需要的系统资源,具备了被调度执行的条件,从而使该线程可以被调度执行。
  3. 线程的运行状态是指线程被JVM线程调度程序分配了CPU执行时间,使用run() (在执行了start()之后,,run()自启动)方法可以使线程进入运行状态。正在运行的线程随时可能由JVM线程调度程序送回可运行状态。
  4. 当线程的run()方法执行完毕后进入终止状态,处于该状态的线程不会再被调度执行。
  5. 阻塞状态通常用于线程之间的通信与同步控制。

创建线程

Java程序中的线程被设计为一个对象,该对象具有自己的生命周期,可以利用接口java.lang.Runnable、类java.lang.Thread、Callable接口 创建一个线程

通过java.lang.Thread创建线程

继承Thread类,重写 run() 方法(必须重写)


public class ThreadDemo extends Thread {@Overridepublic void run() {System.out.println("当前线程的是:"+this.getName());}public static void main(String[] args) {ThreadDemo threadDemo = new ThreadDemo();threadDemo.start();}}
  • 优点:程序代码相对简单,缺点:java 单继承使用场景限制

实现Runnable接口,实现 run() 方法


public class RunnableDemo implements Runnable {@Overridepublic void run() {System.out.println("当前线程的是:"+Thread.currentThread().getName());}public static void main(String[] args) {RunnableDemo runnableDemo = new RunnableDemo();new Thread(runnableDemo).start();}}

Runnable创建线程:通过把Runnable的一个子类的实例作为参数传递 给Thread类的一个构造方法

优点:

  1. 符合面向对象的设计思想

从面向对象的设计角度看,Thread类是虚拟CPU 的封装,因而Thread类的子类是关于CPU行为的类,但是在继承Thread类的子类大多都是与CPU不相关的类,而实现Runnable接口的方法将不会影响到Thread体系

  1. 实现了Runnable接口的类可以 用extends继承其他的类

Callable接口创建线程:实现Callable 接口,使用FutureTask 进行包装,通过Thread的构造方法传入futureTask实例

package com.callable;import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;public class ICallableTest implements Callable<Long> {@Overridepublic Long call() {Long id = Thread.currentThread().getId();System.out.println("当前的线程是"+Thread.currentThread().getName());return id;}public static void main(String[] args) throws ExecutionException, InterruptedException {ICallableTest ct = new ICallableTest();FutureTask futureTask = new FutureTask(ct);Thread t = new Thread(futureTask,"二货");t.start();System.out.println(futureTask.get());}
}

实现Callable接口的 call() 方法是带返回值(方法体中必须return )的,通过futureTask的 get() 获得

在这里插入图片描述

Callable和Runnable 的区别:

  • Runnable的 run() 方法没有返回值,而Callable得 call() 方法有返回值,且支持泛型
  • Runnable 接口 的 run() 方法只能抛出运行时候得异常,且无法捕获处理;Callable 接口 call 方法允许抛出异常(throws Exception),可以获取异常信息

线程的优先级

线程优先级是指优先级越高,越有可能先执行,但只是建议先执行,具体什么时候执行由系统决定(既不能绝对的说线程的调度是按照优先级进行调度的)

例如在windows系统中,当一个优先级为5且处于可运行状态的线程在等待CPU资源的时,系统可能正在执行一个优先级为3的线程

  • 设置线程的优先级
public final void setPriority(int newPriority)
  • 获取线程的优先级
public final int getPriority( )
  • 在Thread 类中定义了线程优先级的取值范围(1~10)
//静态成员变量public static final int MIN_PRIORITY = 1;public static final int NORM_PRIORITY = 5;public static final int MAX_PRIORITY = 10;

优先级高只是建议先执行

Priority.java

public class Priority extends Thread {public Priority(String s){setName(s);}public void run(){System.out.println("线程:"+getName()+"----"+getPriority());}
}

PriorityTest.java

public class PriorityTest {public static void main(String[] args){Priority p1 = new Priority("线程 1");Priority p2 = new Priority("线程 2");Priority p3 = new Priority("线程 3");Priority p4 = new Priority("线程 4");p1.setPriority(1);p2.setPriority(2);p3.setPriority(3);p4.setPriority(4);p1.start();p2.start();p3.start();p4.start();}
}

在这里插入图片描述
在这里插入图片描述

线程调度器

Java提供了一个线程调度器来监视所有程序中的所有运行的线程,并决定哪个线程应该运行,哪个线程应该排队等待。在线程的 调度器的决策过程中,它可以识别线程的两个特征:一个是线程的优先级别,另一个是守护标志

  • 守护线程:一般具有一个较低的优先级别,并且当计算机中运行的线程减少的时,为一个或多个程序提供一项基本的服务。例如垃圾收集线程就是一个不断运行的守护线程,它由于JVM提供,通过扫描程序查找不再被访问的变量,并把这些变量的资源释放给系统
  • 调度器的基本原则:如果只有守护线程在运行,JVM将退出。新线程将从创建它的线程那里继承优先级别和守护标志,调度器通过分析所有线程的优先级来决定哪个线程先运行。具有较高优先级的线程,能够在较低优先级的 线程之前执行(但并不绝对)。
http://www.lbrq.cn/news/2804869.html

相关文章:

  • 怎样做娱乐网站色盲测试卡
  • 去哪儿网站做宣传多少钱上海网站建设制作
  • 网站代码制作it菜鸡网seo
  • 域名app广东seo点击排名软件哪里好
  • 山西建站推广企业网站推广公司
  • 网站建设ppt介绍关键词优化网站排名
  • 做app好还是响应式网站广告推广渠道有哪些
  • 门户网站建设工作室百度竞价推广联系方式
  • 做网站用哪个编程语言河南网站推广多少钱
  • 武汉做网站 九州科技bt兔子磁力搜索
  • 网站界面尺寸大小门户网站怎么做
  • 如何加强省市网站建设100个经典创意营销方案
  • 网站制作公司交接网站服务器信息查询
  • 城市分站cms怎么做网络推广
  • 网站建设 百度推广网站优化公司哪家效果好
  • 制作网站服务公司app开发需要哪些技术
  • ppt做长图网站网络营销推广公司简介
  • 做网站图片素材在线编辑网店推广网站
  • 怎么让百度收录我的网站优化关键词软件
  • ecshop外贸网站黄页网络的推广网站有哪些
  • 门户网站建设内在百度上打广告找谁推广产品
  • 温州市网站制作哪家便宜nba西部最新排名
  • 网站运维工作内容cctv 13新闻频道
  • 网站推广途径和要点有哪些沈阳关键词自然排名
  • bootstrap 新闻网站模板网店推广实训报告
  • 多用户网站建设查网站排名
  • 5星做号宿水软件的网站广丰网站seo
  • 阳泉做网站多少钱百度天眼查
  • 网站报错500竞价什么意思
  • 巩义云启网站建设深圳网站制作公司
  • 【iOS】YYModel第三方库源码
  • gRPC 与 HTTP 性能对比分析
  • 打开或者安装Navicat时出现Missing required library libcurl.dll,126报错解决方法(libmysql_e.dll等)
  • spring第9课,spring对DAO的支持
  • 电源、电流及功率实测
  • 大数据数据库 —— 初见loTDB