Java核心技术知识点笔记—并发

这篇具有很好参考价值的文章主要介绍了Java核心技术知识点笔记—并发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:多任务(multitasking),即同一刻运行多个程序的能力。并发执行的进程数目并不是由CPU数目制约的。操作系统将CPU的时间片分配给每一个进程,给人并行处理的感觉。

1、线程(thread):多线程程序的概念,即可以同时执行多个任务的程序。其中,每个任务称为一个线程。

1.1、多线程与多进程的区别:

(1)本质区别在于,每个进程拥有自己的一整套变量,而线程则共享数据。

(2)共享数据可能存在风险,但这也使线程间的通信比进程间的通信更有效、更容易。

(3)在有些操作系统中,与进程相比,线程更“轻量级”,创建、撤销一个线程比启动新进程的开销小得多。

2、Java中实现线程操作:

2.1、Thread类:可以通过Thread类的子类定义一个线程。

class TestThread extends Thread{
    @Override
    public void run() {
        //执行操作
    }
}

然后构造一个对象,并调用start方法。(注:这种方法已不再推荐。应该将要并行运行的任务与运行机制解耦合。)

        TestThread testThread = new TestThread();
        testThread.start();

2.2、Runnable接口:将任务代码移到Runnable接口的run方法中,由Runnable创建一个Thread对象。

        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                //任务代码
            }
        };
        Thread thread = new Thread(runnable);
        thread.start();

2.3、注意:直接调用Thread类或Runnable对象的run方法,只会执行同一个线程中的任务,而不会启动新线程。应该调用Thread类的start方法,这个方法将创建一个执行run方法的新线程。

2.4、中断线程:当线程的run方法方法体中的代码执行完毕,或经由return语句返回,或在代码执行过程中出现未捕获的异常,线程将终止。

(1)interrupt方法:没有可以强制线程终止的方法,但可以使用interrupt方法请求终止线程。

(2)调用interrupt方法,将使线程的中断状态被置为。每个线程都有这样一个boolean标志。每个线程应时刻检查这个标志,以判断线程是否被中断。

(3)判断线程中断状态是否被置位,可以先通过Thread.currentThread方法获得当前线程,然后调用isInterrupted方法。

(4)如果线程被阻塞,无法检测中断状态。对一个被阻塞线程(调用sleep或wait)调用interrupt方法,阻塞调用将会被Interrupted Exception异常中断。

(5)中断一个线程不等于线程终止。被中断的线程可以决定如何响应中断。某些线程可能非常重要以至于应该处理完异常后继续执行,而不理会中断。

(6)注意interrupted方法和isInterrupted方法:interrupted方法是一个静态方法,它检测当前线程是否被中断,并且会清楚该线程的中断状态;isInterrupted方法是一个实例方法,用来检测线程是否被中断,但不会改变线程的中断状态。

3、线程状态:New(新创建)、Runnable(可运行)、Blocked(被阻塞)、Waiting(等待)、Timed waiting(计时等待)、Terminated(被终止)

(1)New(新创建):线程还未开始运行。

(2)Runnable(可运行):当调用start方法,线程处于runnable状态。此状态的线程可能正在运行,也可能没有运行,取决于操作系统给线程提供运行的时间。开始运行的线程不必始终保存运行,它也可能被中断以便给其他线程获得运行机会。线程的调度细节依赖于操作系统提供的服务。

(3)被阻塞和等待:当线程被阻塞或进入等待状态时,它暂时不活动,即不运行任何代码且消耗最少的资源,直到线程调度器重新激活它。细节取决于它是如何达到非活动状态的:

(3.1)当一个线程试图获取一个内部的对象锁(不是java.util.concurrent库中的锁),而该锁被其他线程持有,则该线程进入阻塞状态。当所有其他线程释放该锁,且线程调度器允许该线程持有该锁的时候,该线程变成非阻塞状态。

(3.2)当线程等待另一个线程通知调度器一个条件时,该线程进入等待状态。

(3.3)有几个方法有一个超时参数。调用它们导致线程进入计时等待状态。这一状态将一直保持到超时期满或接收到适当的通知。带有超时参数的方法有:Thread.sleep、Object.wait、Thread.join、Lock.tryLock、Condition.await的计时版。

(4)被终止:线程因下列两个原因之一被终止

(4.1)run方法正常退出而自然死亡;

(4.2)一个没有捕获的异常终止了run方法而意外死亡。

特别:可以调用线程的stop方法杀死一个线程。该方法抛出ThreadDeath错误对象,由此杀死线程。但该方法已过时,不要再继续使用。文章来源地址https://www.toymoban.com/news/detail-411403.html

到了这里,关于Java核心技术知识点笔记—并发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 区块链学习笔记(6(1),深入理解Linux运维的核心知识点

    (3)检查创世块文件 (4)  检查通道文件(fabric2.2及以前会用到) 创建节点的方式有两种: (1)在创建任何节点之前,必须在本机上自定义其配置文件。对于peer节点,该文件称为 core.yaml ,而orderer节点的配置文件称为 orderer.yaml; (2)使用一个docker容器,将docker节点跑在一个

    2024年04月29日
    浏览(38)
  • Java核心知识点1-java和c++区别、隐式和显示类型转换

    java和c++区别 java通过虚拟机实现跨平台特性,但c++依赖于特定的平台。 java没有指针,它的引用可以理解为安全指针,而c++和c一样具有指针。 java支持自动垃圾回收,而c++需要手动回收。 java不支持多重继承,只能通过实现多个接口来达到相同目的,而c++支持多继承。  隐式(

    2024年02月03日
    浏览(33)
  • Java笔记(细碎小知识点)1

    1.Dos命令:dir:打出当前目录结构;md:创建文件夹;cd+文件夹地址:跳转到当前目录下的对应文件夹;cd..:跳转到上一目录;rd+文件夹:删除文件夹中东西;del+文件(或 “*.文件” 类型这样的正则表达式):删除文件或这类文件;cd/:跳转到盘符;javac+文件名.java:编译

    2024年02月08日
    浏览(29)
  • JAVA知识点笔记—— 开源框架篇

    1、MyBatis 的优点? 1、基于 SQL 语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响, SQL 写在 XML 里,解除 sql 与程序代码的耦合,便于统一管理;提供 XML 标签,支持编写动态 SQL 语句,并可重用。 2、与 JDBC 相比,减少了 50%以上的代码量,消除了 JDB

    2024年02月07日
    浏览(26)
  • 《模拟电子技术》期末复习笔记4——上交大郑益慧课件知识点整理

    笔记整理自B站学习教程 《 模拟电子技术基础 上交大 郑益慧主讲 》 1904年,世界上第一只真空电子二极管在英国物理学家弗莱明的手下诞生,电子技术的时代开始了。为了提高性能, 1906年,美国发明家德福雷斯特做出了第一个三极管,这是电子技术工业革命开始的标志。从

    2024年02月02日
    浏览(64)
  • PyFlink核心知识点

    四层 说明 备注 SteamGraph 代码生成的最初的图 表示程序的拓扑结构 JobGraph 将多个符合条件的节点,链接为一个节点 可以减少数据在节点之间流动所需要的序列化/反序列化/传输消耗 ExecutionGraph JobGraph的并行化版本 是调度层最核心的数据结构 PhysicalGraph JobManager根据ExecutionGra

    2024年04月27日
    浏览(42)
  • Vue入门——核心知识点

    Vue是一套用于 构建用户界面 的 渐进式 JS框架。 构建用户界面:就是将后端返回来的数据以不同的形式(例如:列表、按钮等)显示在界面上。 渐进式:就是可以按需加载各种库。简单的应用只需要一个核心库即可,复杂的应用可以按照需求引入各种Vue插件。 采用组件化模式

    2024年02月06日
    浏览(40)
  • 垃圾回收的核心知识点解析

    Java运行时内存中的程序计数器、虚拟机栈、本地方法栈这三部分区域其生命周期与相关线程有关,随线程而生,随线程而灭。而程序计数器就是一个单纯存地址的整数也不需要关心,因此我们GC(垃圾回收)的主要目标就是堆(堆中存放着几乎所有实例对象)! 一个对象,如

    2024年02月16日
    浏览(31)
  • 一文吃透Tomcat核心知识点

    首先,看一下整个架构图。最全面的Java面试网站 接下来简单解释一下。 Server :服务器。Tomcat 就是一个 Server 服务器。 Service :在服务器中可以有多个 Service,只不过在我们常用的这套 Catalina 容器的Tomcat 中只包含一个 Service,在 Service 中包含连接器和容器。一个完整的 Serv

    2024年02月02日
    浏览(32)
  • JavaSE核心基础-循环-知识点

    1.循环概念 循环是在满足条件的情况下,反复的做同一件事。 Java语言中的循环语句有三种,分别是for语句、while语句和do-while语句。程序中需要循环处理时,程序员要根据实际问题,选择适当的循环语句。解决循环问题时一定要找到循环条件和循环操作。 2.for循环语句格式

    2024年02月22日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包