线程的调度不是跨平台的,它不仅仅取决于java虚拟机,还依赖于操作系统,到底采用哪种调度和特定的JVM有关。
一、JVM线程调度:在多cpu上同时只能运行一个线程,可以在平台间很好的移植,从系统角度看,一个运行的程序只有一个JVM进程和一个线程,其他线程都是JVM的抽象标示,由jvm全权负责调度,对系统来说完全透明。
1.基于优先级的调度(高优先级获取低优先级持有的锁,高优先级优先运行)
2.相同优先级的线程 抢占式,也可能根据运行状态JVM自行调度
操作系统线程调度:
二、1.基于优先级的调度(高优先级获取低优先级持有的锁,低优先级的优先级会被提高到和高优先级相同)
2.相同优先级的线程 时间片(不过window基于时间片)
3.一定时间没得到运行的线程,会自动的提高运行1个优先级别
yeid方法:
1.被调用的线程,处于就绪态
2.对于系统中无同一优先级别的线程,该方法无效,不建议使用
3.调用后,只会给同等优先或更高级别线程运行的机会,不会给低优先级别线程运行的机会,和sleep不同
sleep方法:
1.不会释放线程持有的锁
2.进入阻塞状态
3.指定的毫秒级的会被转化为平台最小分辨率
wait方法:
1.释放线程持有的锁
2.进入阻塞状态
join方法
1.执行后线程进入阻塞状态
2.对自身线程调用会进入永久等待
isAlive方法:
1.可以检测run方法是否结束
2.对自身线程调用永远返回true
线程同步:
1.在类中使用同步方发,默认是锁定this对象
2.对double与long类型的变量进行设值操作是线程不安全的,因为该变量的某些位有线程A设置,某些位又由线程B设置
3.对类的静态方法用synchronize修饰,获得是类锁
4.同步要基于实际对象为原则,不能基于对象的引用,因为对象的引用指向可变
5.在同步块中若有return语句或异常发生,也会自动释放锁
6.用于线程同步的变量必须申明为valotile
等待和通知:
1.不在同步块中调用wait/notify方法,语法出错
2.如有多线程在等待的话,notigy方法并不确定唤醒的是哪一线程
3.一般建议使用notifyAll
在java系统中,线程异常退出会自动释放持有锁
stop方法不建议使用,原因就是它是抛出异常工作的,导致某些关键资源处于不一致的状态
线程安全:
1.无状态的对象是线程安全的
2.不要延迟初始化的竞争条件
3.锁是可重入的
4.不要在没有同步情况下使用共享变量
5.多线程操作64bit的变量是线程不安全的,例如long,double
6.锁定可以保证双方的知名度和原子; volatile变量只能保证能见度
分享到:
相关推荐
在Java中,线程的生命周期包含五个基本状态,分别是新建状态(New)、就绪状态(Runnable)、运行状态(Running)、阻塞状态(Blocked)和死亡状态(Dead)。了解这些状态对于掌握Java多线程编程至关重要。 新建...
根据提供的信息,我们可以推断出这份文档主要关注的是Java线程的相关内容。下面将围绕“Java线程”这一主题展开详细的介绍与解释。 ### Java线程基础 ...希望以上内容能够帮助您更好地掌握Java线程的相关知识。
在燕山大学信息学院计算机系的课程中,李峰教授讲解了Java线程的多个关键知识点。 首先,线程是一个程序内部的顺序控制流,它是执行程序的最小单位。线程与进程的主要区别在于,进程拥有独立的内存空间和系统资源,...
本文将深入解析Java线程的相关知识点,包括线程的定义、创建、状态管理、线程同步和安全问题。 1. **线程定义** 在Java中,线程是进程中的单一顺序控制流,是程序执行的基本单元。线程在进程的上下文中运行,共享...
Java线程是Java编程语言中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的并发性和效率。本教程将深入探讨Java线程的...阅读提供的"Java线程.pdf"和"说明.txt"文件将帮助你更深入地掌握这些知识点。
总的来说,"JAVA线程学习(源代码)"涵盖了Java线程的基础知识和高级特性,包括线程的创建、管理、同步和通信。通过分析和实践这些源代码,你可以深入了解Java并发编程的精髓,提高你的多线程编程能力。
#### 一、Java线程基本概念 1. **如何编写与启动线程** - **方式一:继承Thread类** ```java class MyThread extends Thread { @Override public void run() { // 业务逻辑 } } new MyThread().start(); ...
本教程中的"java线程入门教程,涉及线程基本知识,显浅易懂."文件将详细讲解这些概念,并通过示例代码帮助读者理解和实践。"1-2论坛"可能包含了一些讨论和问题解答,可以帮助你解决学习过程中遇到的困惑。通过学习这...
本文将深入探讨Java线程的核心概念、API以及在实际开发中的应用,旨在帮助你理解和掌握这一关键技能。 首先,我们需要了解什么是线程。在单核CPU系统中,线程是操作系统调度的基本单位,而在多核CPU系统中,每个...
Java线程有五种基本状态:新建(New)、可运行(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Terminated)。这些状态之间的转换是通过调用特定的方法,如start()、sleep()、join()、wait()、notify()等...
### Java线程的基本知识 #### 一、线程与进程 1. **进程**:在计算机操作系统中,进程是系统进行资源分配和调度的基本单位,是程序的一次动态执行过程。当你启动一个应用程序时,实际上就是创建了一个新的进程。 2...
除了基本的线程创建,Java还提供了synchronized关键字用于线程同步,防止多个线程同时访问共享资源导致数据不一致。synchronized可以修饰方法或代码块,当一个线程正在执行synchronized代码时,其他线程必须等待。 ...
### Java线程使用教程知识点详解 #### 一、线程基础概述 - **定义与特点**:线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。Java是首个在语言级别明确支持线程特性的...
Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要...通过对这些知识点的学习和实践,读者可以深入理解Java多线程的运用,提升编程技能。
Java线程有10个优先级,从`MIN_PRIORITY`(1)到`MAX_PRIORITY`(10),默认是`NORM_PRIORITY`(5)。优先级高的线程更可能被调度执行,但不保证。 4. **线程同步** 当多个线程访问共享资源时,可能会出现竞态条件,...
### Java线程教程知识点梳理 #### 一、教程概述 - **目标读者**: 本教程主要面向具备丰富Java基础知识但缺乏多线程编程经验的学习者。 - **学习成果**: 学习者能够掌握编写简单的多线程程序的能力,并能够理解和...
本篇知识点将详细解读Java线程的基础知识,包括线程的定义、它在多线程编程中的作用、线程间通信的基本方法、线程的优劣势以及如何在Java中创建和管理线程。 首先,线程可以理解为在进程内独立执行的路径,它拥有...