面试突击指南:Java基础面试题3

1.介绍下进程和线程的关系

进程:一个独立的正在执行的程序。

线程:一个进程的最基本的执行单位,执行路径。

在这里插入图片描述

多进程:在操作系统中,同时运行多个程序。

多进程的好处:可以充分利用CPU,提高CPU的使用率。

多线程:在同一个进程(应用程序)中同时执行多个线程。

多线程的好处:提高进程的执行使用率,提高了CPU的使用率。

注意

  1. 在同一个时间点,一个CPU中只可能有一个线程在执行。
  2. 多线程不能提高效率,反而会降低效率,但可以提高CPU的使用率。
  3. 一个进程如果有多条执行路径,则称为多线程程序。
  4. Java虚拟机的启动至少开启了两条线程:主线程和垃圾回收线程。
  5. 一个线程可以理解为进程的子任务。

2.说说Java中实现多线程的几种方法

在Java中,实现多线程的常用三种方式是:

  1. 继承Thread类
  2. 实现Runnable接口
  3. 实现Callable接口(JDK 1.5及以上)
  4. 线程池方式创建
继承Thread类

实现的步骤:

  1. 创建Thread类的子类。
  2. 重写run方法。
  3. 创建线程对象。
  4. 启动线程。

案例代码:

package com.bobo.thread;

public class ThreadDemo02 {
   
    public static void main(String[] args) {
   
        System.out.println("main方法执行了1...");
        // Java中的线程本质上就是一个Thread对象
        Thread t1 = new ThreadTest01();
        // 启动一个新的线程
        t1.start();
        for (int i = 0; i < 100; i++) {
   
            System.out.println("main方法的循环..." + i);
        }
        System.out.println("main方法执行结束了3...");
    }
}

class ThreadTest01 extends Thread {
   
    @Override
    public void run() {
   
        System.out.println("我们的第一个线程执行了2....");
        for (int i = 0; i < 10; i++) {
   
            System.out.println("子线程:" + i);
        }
    }
}

注意点

  1. 启动线程是使用start方法而不是run方法。
  2. 线程不能启动多次,如果要创建多个线程,则需要创建多个Thread对象。

线程启动流程图

实现Runnable接口

在这种方式中,可以通过实现Runnable接口来实现线程程序代码和数据的有效分离。

实现的步骤:

  1. 创建Runnable的实现类。
  2. 重写run方法。
  3. 创建Runnable实例对象。
  4. 创建Thread对象,并把Runnable实现作为Thread构造方法的参数。
  5. 启动线程。

案例代码:

package com.bobo.runable;

public class RunableDemo01 {
   
    public static void main(String[] args) {
   
        System.out.println("main执行了...");
        Runnable r1 = new RunableTest();
        Thread t1 = new Thread(r1);
        t1.start();
        System.out.println("main结束了...");
    }
}

class RunableTest implements Runnable {
   
    @Override
    public void run() {
   
        System.out.println("子线程执行了...");
    }
}

实现Runnable接口的好处

  1. 可以避免Java单继承带来的局限性。
  2. 适合多个相同的程序代码处理同一个资源的情况,较好地体现了面向对象的设计思想。
实现Callable接口

通过实现Callable接口的方式可以获取线程的返回结果,并且可以抛出异常。这种方式在JDK 1.5之后推出。

实现的步骤:

  1. 创建Callable的实现类。
  2. 实现call方法,定义返回结果。
  3. 创建Callable实例对象。
  4. 使用FutureTask类来封装Callable对象。
  5. 使用Thread对象来启动线程。

案例代码:

package com.bobo.callable;

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

public class CallableDemo01 {
   
    public static void main(String[] args) throws Exception {
   
        Callable<Integer> callable = new MyCallable();
        FutureTask<Integer> futureTask = new FutureTask<>(callable);
        Thread t1 = new Thread(futureTask);
        System.out.println("main方法start....");
        t1.start();
        System.out.println(futureTask.get());
        System.out.println("main方法end ....");
    }
}

class MyCallable implements Callable<Integer> {
   
    @Override
    public Integer call() throws Exception {
   
        int sum 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis 7.x 系列【9】数据类型之自动排重集合(Set)

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 前言2. 常用命令2.1 SADD2.2 SCARD2.3 SISMEMBER2.4 SREM2.5 SSCAN2.6 SDIFF2.7 SU…

Jmeter,badboy学习

1、注意Jmeter与jdk之间的版本对应 2、Jmeter的作用&#xff1a; jmeter可以做接口测试和压力测试。其中接口测试的简单操作包括做http脚本&#xff08;发get/post请求、加cookie、加header、加权限认证、上传文件&#xff09;、做webservice脚本、参数化、断言、关联&#x…

Polyplus转染试剂的优点,你知道吗?

Polyplus专注于为生命科学研究、体内转染、生物制品制造以及细胞和基因治疗的客户&#xff0c;提供创新的核酸递送解决方案。其深耕转染领域&#xff0c;产品力强劲。在科研领域&#xff0c;其产品转染效果以及价格都优于lipo系列。无论是在基础科学研究中&#xff0c;还是在临…

Node.js下载及安装详细教程

目录 Node.js安装详细教程 下载安装环境变量配置文件结构配置npm在安装全局模块时的路径和缓存cache的路径测试常见命令 Node.js安装详细教程 &#x1f441;官网下载地址:Download | Node.js (nodejs.org) 下载速度慢的话 可以使用网盘下载&#xff1a; https://pan.quark.…

文心一言 VS 讯飞星火 VS chatgpt (290)-- 算法导论21.3 3题

三、给出一个包含 m 个 MAKE-SET 、UNION 和 FINDSET 操作的序列(其中有 n 个是 MAKE-SET 操作)&#xff0c;当仅使用按秩合并时&#xff0c;需要 Ω(mlgn) 的时间。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 在并查集&#xff08;Union-Find&#xff09;数…

RabbitMQ WEB管理端介绍

页面功能概览 Overview(概述)Connections(连接)Channels(通道)Exchanges(交换器)Queues(队列)Admin(用户管理)。 1. Overview(概述) 主要分为三部分 1.1 Queued messages&#xff08;所有队列的消息情况&#xff09; Ready&#xff1a;待消费的消息总数Unacked&#xff1a;待应…

今日好料(网易数据治理白皮书)

今日好料&#xff08;网易数据治理白皮书&#xff09; 在当前的数字经济时代&#xff0c;数据已经成为企业最重要的资产之一。然而&#xff0c;如何管理和利用这些数据&#xff0c;成为企业成功的关键所在。本文将探讨数据治理的概念、重要性及其实施策略&#xff0c;结合网易…

国标GB/T 28181详解:国标GBT28181-2022的目录通知流程

目录 一、定义 二、作用 1、实时同步设备目录状态 2、优化资源管理和调度 3、增强系统的可扩展性和灵活性 4、提高系统的可靠性和稳定性 5、支持多级级联和分布式部署 6、便于用户管理和监控 三、基本要求 1、目录通知满足以下基本要求 2、关键要素 &#xff08;1…

Python调用外部系统命令详细讲解

利用Python调用外部系统命令的方法可以提高编码效率。调用外部系统命令完成后可以通过获取命令执行返回结果码、命令执行的输出结果进行进一步的处理。本文主要描述Python常见的调用外部系统命令的方法&#xff0c;包括os.system()、os.popen()、subprocess.Popen()等。 本文分…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【14】缓存与分布式锁

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【14】缓存与分布式锁 缓存本地缓存分布式缓存-本地模式在分布式下的问题分布式缓存整合 redis 作为缓存JMeter测试出OutOfDirectMemoryError【堆外内存溢出】 高并发读下缓存失效问题缓存…

操纵系统的特征调度算法

操纵系统的特征 调度算法是操作系统用来决定各个进程/作业在CPU上执行顺序的方法。最常见的调度算法有&#xff1a;FCFS、SJF、HRRN、RR、HPF和MFQ。这集先介绍前三个 先来先服务 FCFS 根据作业到达的先后顺序调度&#xff0c;CPU会一直运行直到作业结束&#xff0c;所以这个…

iptables(12)实际应用举例:策略路由、iptables转发、TPROXY

简介 前面的文章中我们已经介绍过iptables的基本原理,表、链的基本操作,匹配条件、扩展模块、自定义链以及网络防火墙、NAT等基本配置及原理。 这篇文章将以实际应用出发,列举一个iptables的综合配置使用案例,将我们前面所涉及到的功能集合起来,形成一个完整的配置范例。…

安全:Linux重要安全配置之关闭常规ssh链接-开启密钥方式链接-防入侵非常重要以及有效的一项操作

https://doc.youyacao.com/88/2154 安全&#xff1a;Linux重要安全配置之关闭常规ssh链接-开启密钥方式链接-防入侵非常重要以及有效的一项操作 问题背景 优雅草官方的服务器长期被各类牛鬼蛇神来搞事情&#xff0c;之前其中有一台测试服由于属于管理和维护&#xff0c;安全…

【直播倒计时】面向AI领域的开发工程师:TinyML在国产FPGA的边缘AI加速应用

TinyML是机器学习中的一个新兴领域&#xff0c;专注于开发可在低功耗、内存受限的设备上运行的算法和模型。其核心目标是将先进的机器学习算法和模型移植到体积小巧、能耗极低的嵌入式设备中&#xff0c;使这些设备具备边缘智能&#xff0c;能够在没有外部服务器支持的情况下进…

【面试题】Spring面试题

目录 Spring Framework 中有多少个模块&#xff0c;它们分别是什么&#xff1f;Spring框架的设计目标、设计理念&#xff1f;核心是什么&#xff1f;Spring框架中都用到了哪些设计模式&#xff1f;Spring的核心机制是什么&#xff1f;什么是Spring IOC容器&#xff1f;什么是依…

Micrometer+ZipKin分布式链路追踪

目录 背景MicrometerMicrometer与ZipKin之间的关系专业术语分布式链路追踪原理 ZipKin安装下载 MicrometerZipKin 案例演示相关文献 背景 一个系统页面上的按钮点击到结果反馈&#xff0c;在微服务框架里&#xff0c;是由N个服务组成返回结果&#xff0c;中间可能经过a->b-…

基于pytorch实现的 MobileViT 的图像识别(迁移学习)

1、介绍 MobileViT 轻量级的分类识别网络&#xff0c;结合了CNN卷积和Transformer 混合的网络架构 关于更多介绍可以自行百度&#xff0c;本文通过pytorchpython进行实现 更多基础的图像分类网络&#xff0c;参考&#xff1a;图像分类_听风吹等浪起的博客-CSDN博客 2、相关代…

算法力扣刷题记录六【203移除链表元素】

前言 链表篇&#xff0c;开始。 记录六&#xff1a;力扣【203移除链表元素】 一、数据结构——链表 来源【代码随想录】&#xff0c;总结&#xff1a; &#xff08;1&#xff09;线性结构。内存地址不连续&#xff0c;通过指针指向串联一起。 &#xff08;2&#xff09;链表类…

《化工管理》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《化工管理》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的第一批认定学术期刊。 问&#xff1a;《化工管理》级别&#xff1f; 答&#xff1a;国家级。主办单位&#xff1a;中国石油和化学工业联合会 主管单位&…

API-其他事件

学习目标&#xff1a; 掌握其他事件 学习内容&#xff1a; 页面加载事件元素滚动事件页面尺寸事件 页面加载事件&#xff1a; 加载外部资源&#xff08;如图片、外联CSS和JavaScript等&#xff09;加载完毕时触发的事件。 为什么要学&#xff1f;&#xff1f; 有些时候需要等…