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

这篇具有很好参考价值的文章主要介绍了【Java练习题汇总】《第一行代码JAVA》多线程篇,汇总Java练习题——线程及多线程概念、Thread 类及 Runnable 接口、线程状态、synchronized同步操作...。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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. 简述死锁的产生。

五、 编程题文章来源地址https://www.toymoban.com/news/detail-602156.html

  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;
        }
    
        @Override
        public 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();
        }
    }
    
    

【Java练习题汇总】《第一行代码JAVA》多线程篇,汇总Java练习题——线程及多线程概念、Thread 类及 Runnable 接口、线程状态、synchronized同步操作...,# Java练习题,java,开发语言,经验分享,java-ee,jvm,后端

到了这里,关于【Java练习题汇总】《第一行代码JAVA》多线程篇,汇总Java练习题——线程及多线程概念、Thread 类及 Runnable 接口、线程状态、synchronized同步操作...的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • java -- 练习题

    1.定义一个Person类,要求有姓名和年龄,并且符合JavaBean标准,定义Student类继承Person,定义测试类,创建Student对象,要求创建Student对象的同时,指定Student对象的姓名为\\\"张三\\\",只能指定姓名不许指定年龄 2.按照以下要求定义类 3.键盘录入一个字符串,判断这个字符串是否是对称的字符串

    2023年04月09日
    浏览(28)
  • Java 练习题

    台式机,安卓手机,iPhone手机,他们其实都是计算机,计算机干的事情就是严格的执行人的指令,但是目前的科技条件下,电脑仍然有一个很大的短板,这个短板是? A 思考 B 计算 答案:A 计算机不能思考,那他是如何工作的呢,下面的描述哪个是对的? A 等待人工智能的进

    2024年02月03日
    浏览(26)
  • Java练习题2022-1

    HashSet是Java中常用的Set集合,向HashSet集合中添加数据对象时,首先会调用对象的hashCode()方法获取哈希码,根据哈希码计算对象的存储位置,如果相应位置上已经有数据对象,则会调用对象的equals()方法判断新加入的对象与现有对象是否重复,如果重复则拒绝加入。为了使用

    2024年02月08日
    浏览(36)
  • JAVA练习题——判断题

    1:java语言中不用区分字母的大写小写 T         F 2:Java的字符类型采用的是ASCII编码。 T         F 3:Java的字符类型采用的是Unicode编码,每个Unicode码占16个比特。 T          F 4:Java的各种数据类型占用固定长度,与具体的软硬件平台环境无关。 T         F

    2024年02月09日
    浏览(34)
  • Java选择结构作业练习题

    1.从键盘输入3个数,求最大值 请输入3个数: 5 2 11   你好,最大数是11 我想买车,买什么车决定于我在银行有多少存款: 如果我的存款超过500万,我就买卡迪拉克 否则,如果我的存款超过100万,我就买帕萨特 否则, 如果我的存款超过50万,我就买依兰特 否则, 如果我的存

    2024年02月02日
    浏览(31)
  • 2021级Java程序设计课程练习题

    1-1 抽象类是不能实例化的。  T   1-2 JAVA抽象类中一定含有抽象方法。  F   答题时没有看到一定qaq,抽象类不一定包含抽象方法,但包含抽象方法的类一定是抽象类。 2-2 有如下程序代码, 程序运行的结果是( )。 D.false true 第一个竟然是false!!! 使用“==”比较两个字符

    2023年04月23日
    浏览(32)
  • Java入门篇 之 逻辑控制(练习题篇)

    博主碎碎念: 练习题是需要大家自己打的请在自己尝试后再看答案哦; 个人认为,只要自己努力在将来的某一天一定会看到回报,在看这篇博客的你,不就是在努力吗,所以啊,不要放弃,路上必定坎坷,但是成功后放眼望去,这将是青春很浓重的一笔 今日份励志文案 :若结

    2024年02月06日
    浏览(33)
  • Java练习题-用冒泡排序法实现数组排序

    ✅作者简介:CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1🏆 📃个人主页:hacker707的csdn博客 🔥系列专栏:Java练习题 💬个人格言:不断的翻越一座又一座的高山,那样的人生才是我想要的。这一马平川,一眼见底的活,我不想要,我的人生

    2024年02月08日
    浏览(40)
  • Java从入门到熟悉的48道练习题[完结]

    Ps:好久没写blog,所以打算写一个作业练习的系列,可以让新手更容易上手。大家加油!!废话不多说,上代码。 睡觉前把下午完成的作业写到blog,好困。。。要是能有个人给我点个赞我将会无比高兴!! PS:以上只是我自己的解题方法,代码么,其实没有什么标准的死答案,

    2024年02月04日
    浏览(41)
  • 【Java基础篇】逻辑控制练习题与猜数字游戏

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏 :Java.SE,本专栏主要讲解运算符,程序逻辑控制,方法的使用,数组的使用,类和对象,继承和多态,抽象类和接口等内容 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 判

    2024年02月08日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包