【Java练习题汇总】《第一行代码JAVA》多线程篇,汇总Java练习题——线程及多线程概念、Thread 类及 Runnable 接口、线程状态、synchronized同步操作...

Java练习题 · 多线程篇

  • 1️⃣ 多线程篇
  • 2️⃣ 答案

1️⃣ 多线程篇

一、填空题

  1. Java 多线程可以依靠________ 、________ 和________ 三种方式实现。
  2. 多个线程操作同一资源的时候需要注意________,依靠________ 关键字实现,实现手段是:________ 和________,过多的使用,则会出现________ 问题。
  3. Java 程序运行时,至少启动________ 个线程,分别是________ 和________ 。
  4. main 线程的优先级是________ 。
  5. 线程在生命周期中要经历五种状态,分别是________状态、________状态、________状态、________状态和________状态。
  6. Object类提供的________ 、________ 和________ 三个方法可以控制线程。

二、选择题

  1. 线程的启动方法是( )。
    A. run()
    B. start()
    C. begin()
    D. accept()

  2. Thread 类提供表示线程优先级的静态常量,代表普通优先级的静态常量是( )。
    A. MAX _PRIORITY
    B. MIN_PRIORITY
    C. NORMAL_PRIORITY
    D. NORM_PRIORITY

  3. 设置线程优先级的方法是( )。
    A. setPriority()
    B. getPriority()
    C. getName()
    D. setName()

  4. Thread 类的 ( )方法是不建议使用的。
    A. stop()
    B. suspend()
    C. resume()
    D. 全部都是

  5. 下列 ( ) 关键字通常用来对对象加锁,从而使得对对象的访问是排他的。
    A. serialize
    B. transient
    C. synchronized
    D. static

三、 判断题

  1. Java 直接调用 Thread 类中的 run(方法可以启动一个线程。 ( )
  2. 进程是在线程的基础之上的进一步划分。 ( )
  3. Java 是多线程的编程语言。 ( )
  4. 不管使用 Callable 还是Runnable 接口实现的多线程最终都需要通过Thread 类启动。 ( )

四、 简答题

  1. 简述线程两种实现方式及区别。
  2. 简述死锁的产生。

五、 编程题

  1. 设计四个线程对象,两个线程执行减操作,两个线程执行加操作。

2️⃣ 答案

一、填空题

  1. 继承Thread类、实现Runnable接口 和使用线程池
  2. 线程安全,synchronized ,实现手段是:同步代码块 和同步方法,过多的使用,死锁
  3. 一个,主线程 和其他由程序创建的线程
  4. 5
  5. 新建状态、就绪状态、运行状态、阻塞状态和终止状态
  6. wait()、notify() 和notifyAll()

二、选择题

  1. ( B )
  2. ( D )
  3. ( A )
  4. ( A )
  5. ( C )

三、 判断题

  1. ( ❌ )
  2. ( ✔️ )
  3. ( ✔️ )
  4. ( ✔️ )

四、 简答题

  1. 简述线程两种实现方式及区别。

    两种线程的实现方式分别是继承Thread类和实现Runnable接口。

    • 继承Thread类:通过继承Thread类并重写其run()方法来创建线程。这种方式相对简单,但由于Java只支持单继承,因此如果已经继承了其他类,则不能再直接使用该方式创建线程。

    • 实现Runnable接口:通过实现Runnable接口,并实现其run()方法来创建线程。这种方式更加灵活,因为Java支持多个接口的实现。同时,可以将Runnable对象传递给Thread类的构造函数,在需要时创建线程。

    区别:

    • 继承Thread类的方式限制了单继承的特性,因为一个类只能继承一个父类。但它可以通过重写Thread类的方法来定义线程的行为。
    • 实现Runnable接口的方式克服了单继承的限制,因为它允许类实现多个接口,并将实现了Runnable接口的类作为参数传递给Thread类的构造函数。
    • 使用Runnable接口的方式更加常见和推荐,因为它可以更好地符合面向对象的设计原则,将线程的任务与线程本身进行解耦。
  2. 简述死锁的产生。

    死锁是指多个线程因相互等待对方所持有的资源而无法继续执行的情况。死锁的产生通常涉及以下四个条件:

    • 互斥条件:至少有一个资源被多个线程排他性地持有,即一次只能由一个线程使用。
    • 请求与保持条件:一个线程在持有了部分资源的同时,继续请求其他资源。
    • 不可剥夺条件:已经分配给一个线程的资源不能被强制性地剥夺。
    • 循环等待条件:存在一个等待循环,每个线程都等待下一个线程所持有的资源。

    当以上条件同时满足时,就可能引发死锁现象。当多个线程都在等待获取对方所拥有的资源,而无法释放自己持有的资源时,就会陷入死锁状态,程序无法继续执行下去。

五、 编程题

  1. 代码如下:
    public class AddSubThread implements Runnable {private static int number = 0;private int operation;public AddSubThread(int operation) {this.operation = operation;}@Overridepublic void run() {if (operation == 0) {for (int i = 0; i < 5; i++) {synchronized (AddSubThread.class) {number++;System.out.println("加操作:" + number);}try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}} else {for (int i = 0; i < 5; i++) {synchronized (AddSubThread.class) {number--;System.out.println("减操作:" + number);}try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}}public static void main(String[] args) {// 创建四个线程对象,两个线程执行加操作,两个线程执行减操作Thread t1 = new Thread(new AddSubThread(0));Thread t2 = new Thread(new AddSubThread(0));Thread t3 = new Thread(new AddSubThread(1));Thread t4 = new Thread(new AddSubThread(1));// 启动线程t1.start();t2.start();t3.start();t4.start();}
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/415836.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「 网络安全常用术语解读 」杀链Kill Chain详解

1. 简介 早在2009年&#xff0c;Lockheed Martin公司就提出了杀链(Kill Chain)理论&#xff0c;现在也称之为攻击者杀链(Attacker Kill Chain)。杀链其实就是攻击者进行网络攻击时所采取的步骤。杀链模型包括7个步骤&#xff1a;1侦察 -> 2武器化 -> 3交付 -> 4利用 …

C语言——整数和浮点数在内存中的存储

目录 一、整数在内存中的存储 二、大小端字节序和字节序判断 2.1 什么是大小端&#xff1f; 2.2 为什么有大小端? 2.3 练习 2.3.1 练习1 2.3.2 练习2 三、浮点数在内存中的存储 3.1练习 3.2 浮点数的存储 3.2.1浮点数存的过程 3.2.2浮点数取的过程 3.3 题目解…

消息中间件之Kafka(一)

1.简介 高性能的消息中间件&#xff0c;在大数据的业务场景下性能比较好&#xff0c;kafka本身不维护消息位点&#xff0c;而是交由Consumer来维护&#xff0c;消息可以重复消费&#xff0c;并且内部使用了零拷贝技术&#xff0c;性能比较好 Broker持久化消息时采用了MMAP的技…

pl/sql程序块的使用

-- Created on 2024-01-15 by ADMINISTRATOR declare -- Local variables hererecord_tablename varchar2(100);---test_record表名record_StartNo integer(19);---test_record开始编号temp_No integer(19);maxnbbh integer(19);nCnt integer : 20;fi…

利用浏览器开发者工具进行网页性能优化

目录 学习目标&#xff1a; 学习内容&#xff1a; 学习时间&#xff1a; 学习产出&#xff1a; 网页性能优化的基本概念和指标&#xff1a; 浏览器开发者工具的基本功能和使用方法&#xff1a; 使用网络面板进行网页加载性能分析&#xff1a; 使用性能面板进行网页渲染性能分析…

零基础学Python(1)— 一文带你了解什么是Python(包括Python解释器安装步骤等)

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。从今天开始&#xff0c;我们就一起进入Python的世界&#xff01;&#x1f389;为了让大家能够牢固地掌握Python语言&#xff0c;本系列文章就循序渐进&#xff0c;从最基础的知识开始讲起&#xff0c;教大家如何去使用Pyth…

Halcon 一维测量

文章目录 算子矩形算子弧形算子移动到新的参考点 Halcon 案例测量保险丝的宽度&#xff08;边缘对测量&#xff09;使用助手进行测量 halcon 案例获取芯片引脚的个数平均宽度距离&#xff0c;连续两个边缘的距离&#xff08;measure_pos &#xff09;halcon 定位测量Halcon 测量…

路由器结构

路由器是连接互联网的设备&#xff0c;本文主要描述路由器的结构组成。 如上所示&#xff0c;OSI&#xff08;Open System Interconnect&#xff09;开放系统互联参考模型是互联网架构的标准协议栈&#xff0c;由ISO标准组织制定。自底向上&#xff0c;互联网架构分为7层&#…

nvm, node.js, npm, yarn 安装配置

文章目录 nvm 安装node.js 安装npm yarn 配置 nvm 安装 nvm 是一个 node.js 管理工具&#xff0c;可以快捷下载安装使用多个版本的node.js linux 命令行输入&#xff1a; curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bashwget -qO- https…

防火墙技术

防火墙&#xff08;英语&#xff1a;Firewall&#xff09;技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备&#xff0c;帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障&#xff0c;以保护用户资料与信息安全性的一种技术。 防火墙技术的功能主要在于及…

C for Graphic:Sliced Circle Image

不做UI不知道&#xff0c;没想到时至今日&#xff0c;ugui居然没有sliced filled image模式&#xff0c;用circle做filled&#xff0c;不能用sliced九宫格图&#xff0c;导致每次使用这个效果必须一张新图&#xff0c;何其浪费资源。 原始功能如下&#xff1a; 我…

C++深入之虚函数、虚继承与带虚函数的多基派生问题

基础 在讲解带虚函数的多基派生问题时&#xff0c;我们要先弄清楚不带虚函数的多基派生存在什么样的问题&#xff0c;这样才好弄明白带虚函数的多基派生问题。 多基派生的二义性问题 一般来说&#xff0c;在派生类中对基类成员的访问应当具有唯一性&#xff0c;但在多基继承…