美文网首页
Java基础知识11-多线程3

Java基础知识11-多线程3

作者: 我相信你爱过gg | 来源:发表于2017-02-01 21:00 被阅读13次
配图

线程调度

线程调度程序根据线程优先级决定每个线程应当何时运行。理论上,优先级更高的线程比优先级更低的线程会获得更多的CPU时间。实际上,线程得到的CPU时间除了依赖于优先级外,通常还依赖于其他几个因素(例如,操作系统实现多任务的方式可以会影响CPU时间的相对可用性)。

具有更高优先级的线程还可能取代更低优先级的线程。例如,当一个低优先级的线程运行时,需要恢复一个更高优先级的线程(例如,从休眠或等待I/O中恢复)时,高优先级的线程将取代低优先级的线程。

理论上,具有相同优先级的线程应当得到相等的CPU时间。但是,java被设计在范围广泛的环境种运行。有些环境实现多任务的方式与其他环境不同。为了安全起见,具有相同优先级的线程应当时不时释放控制权。这样可以确保所有线程在非抢占式操作系统中有机会运行。

实际上,即使是在非抢占式环境中,大部分线程仍有机会运行,因为大部分线程不可避免的会遇到一些阻塞情况,例如I/O等待。

发生这种情况时,阻塞的线程被挂起,其他线程就可以运行。但是,如果希望平滑多个线程执行,最好不要依赖于这种情况。此外,某些类型的任务是CPU密集型的。这种线程会支配CPU。对于这类线程,要经常释放控制权,以使其他线程能够运行。

线程两种调度模型

1.分时调度模型
所有线程轮流使用CPU的控制权,平均分配CPU的占用时间。
2.抢占式调度模型
优先让优先级更高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个,优先级高的线程获取的时间会多一些

java使用的是抢占式调度模型。

设置优先级

public final void setPriority(int newPriority)

参数:newPriority取值范围为1-10。

线程休眠

try {
     Thread.sleep(10);//以毫秒为单位。10毫秒
} catch (InterruptedException e) {
      e.printStackTrace();
}

sleep()属于静态方法,可以直接使用类名调用。

等待指定线程终止

ThreadJoin tj = new ThreadJoin();
Thread thread = new Thread(tj, "tj");
try {
    thread.join();
} catch (InterruptedException e) {
    e.printStackTrace();
}

join()方法会一直等待tj线程的结束,当tj线程执行完毕后才会继续往下执行。
也可以使用isAlive()方法来判断一个线程是否执行完成,如果线程在运行则返回true,否则返回false。

守护线程(后台线程)

public final void setDaemon(boolean on)

将该线程标记为守护线程或用户线程。当正在运行的线程都是守护线程时,Java 虚拟机退出。 该方法必须在启动线程前调用。
简单理解为,主线程结束时,守护线程同时结束。设置true为守护线程。

线程中断

线程中断的两种方式

public final void stop()
public void interrupt()

区别
stop()让线程停止。
interrupt()中断线程。将线程状态终止。并跑出InterruptedException异常。

线程生命周期

线程生命周期

相关文章

  • Java基础知识11-多线程3

    线程调度 线程调度程序根据线程优先级决定每个线程应当何时运行。理论上,优先级更高的线程比优先级更低的线程会获得更多...

  • Java多线程高级特性(JDK8)

    [TOC] 一、Java多线程 1.Java多线程基础知识 Java 给多线程编程提供了内置的支持。一条线程指的是...

  • 多线程--同步与锁

    同步与锁 上一篇中,笔者介绍了Java多线程的基础知识,主要讲解了进程/线程的区别、Java多线程的创建、Java...

  • Java多线程目录

    Java多线程目录 Java多线程1 线程基础Java多线程2 多个线程之间共享数据Java多线程3 原子性操作类...

  • Java多线程:生命周期,实现与调度

    前面几篇文章为Java多线程做足了铺垫,这篇终于到了正题,一起学习一下Java多线程的基础知识。 1. Java线...

  • Android开发 Java线程基础

    简介 本篇文章是带大家了解 Java多线程的基础知识.主要内容: 介绍多线程的概念, 了解多线程的优点, 状态, ...

  • Java学习

    Java 基础知识点 基础语法 多线程 并发 IO、NIO 集合框架 网络 RMI SQL 上图来自Java 征途...

  • 阿里技术面试2

    电话面试主要考察3块内容: 1、Java的相关基础知识,开源框架的原理,JVM,多线程,高并发,中间件等; 2、之...

  • Java基础day11笔记:多线程同步函数|synchroniz

    11-多线程(多线程-同步函数) 银行类: 储户类: 主函数中开两个线程: 运行结果: 但...

  • java基础知识学习(六)-多线程机制

    title: java基础知识学习(六)-多线程机制date: 2019-04-30 22:06:47tags: ...

网友评论

      本文标题:Java基础知识11-多线程3

      本文链接:https://www.haomeiwen.com/subject/yyhsvttx.html