首页 > 编程语言 >java多线程基础知识速通

java多线程基础知识速通

时间:2024-10-14 20:35:29浏览次数:7  
标签:java 速通 Thread start 线程 new 多线程 sleep wait

 1.线程和进程的区别

进程是正在运行的程序实例,每个进程包含了多个线程,每个现场执行不同的任务

进程都有自己的内存空间,而一个进程下的线程们则是共享内存空间

线程更加轻量,线程上下文切换的成本远低于进程上下文切换的成本

 

2.并行与并发的区别

并行是多核CPU一般执行相应个数的线程

并发是线程轮流使用一个或多个CPU,在单CPU的状态下,微观上讲其实他是串行的

 

3.创建线程都有哪些方式

extends Thread

public class MyThread extends Thread{
    ......
}

MyThread thread=new MyThread();

implement Runnable

pubic class MyRunnable implement Runnable{
    .......
}

MyRunnable runnable=new MyRunnable();
Thread thread=new Thread(runnable);

implement Callable<T>

public class MyCallable implement Callable<T>{
    public T call(){
        ....
        return T;
    }
}

MyCallable callable=new MyCallable();
FutureTask<T> task=new FutureTask(callable);
Thread t=new Thread(task);
...
t.start();
...
//调用task的get方法可以获取执行结果
T res=task.get()

线程池创建线程

public class MyExecutors implements Runable{
    .......
}

// 创建线程池对象
ExecutorService executorPool=Executors.newFiexedThreadPool(3);
threadPool.submit(new MyExecutors());

// 关闭线程池
threadPool.shutdown

 

4.实现runnable和实现callable有什么区别?

  1. callable是有返回值的,可以用Future、FutureTask拿到执行的结果
  2. run()是不允许抛异常的,但是call()是可以抛的

 

5.线程执行的run()和start()方法有什么区别

run方法是直接执行了被封装的代码,是可以执行多次的

start方法是启动线程,该方法只能调用一次,多次会抛出异常。不过start方法也是调用run方法内的逻辑

 

6.线程包含了哪些状态

新建->运行->( 阻塞 等待 时间等待 )->终止

new一个线程之后是新建状态

调用start()方法后线程进入运行状态;在方法体内sync抢不到锁进入阻塞状态,获得锁后返回运行状态;有sleep()就是进入时间等待状态,;有wait()方法就是进入等待状态,notify()方法唤醒后进入运行状态

线程抢到了CPU执行权,start结束后就是终止状态

 

7.如何保证线程按顺序执行

线程具有join()方法,具体为等待某线程结束后,该线程才可以执行

Thread t1 = new Thread(() -> {
            System.out.println("t1 is run....");
        });
        Thread t2 = new Thread(() -> {
            try {
                t1.join();//直到t1运行结束之后t2才会运行
                System.out.println("t2 is run....");
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }


        });
        t2.start();
        t1.start();

 

8.什么是notify和notifyAll

notify是随机唤醒一个wait线程;notifyAll是唤醒所有wait线程

 

9.说说wait和sleep的不同

wait(),wait(long)和sleep(long)都能让当前线程暂时放弃cpu的使用权,进入阻塞状态;

sleep是静态方法,可以直接用,wait方法是Object成员的方法,每个对象都有

wait()和wait(long)都可以被notify唤醒;sleep(long)、wait(long)都会在等待相应时间后被唤醒;都可以被打断唤醒

wait必须要配合锁来使用(比如sync锁)sleep无限制;wait执行后会释放CPU使用权,给其他线程使用sleep如果在sync锁内,即使sleep了CPU使用权也未释放

 

10.如何停止一个正在运行的线程

使用flag,让线程正常退出(在线程外指定位置终止while(xxx)条件)

使用interupt方法中断线程,打断sleep,wait,join的线程会抛异常;打断正常线程和第一种情况一样

标签:java,速通,Thread,start,线程,new,多线程,sleep,wait
From: https://www.cnblogs.com/kun1790051360/p/18455295

相关文章

  • JAVA中的Xms、Xmx、MetaspaceSize、MaxMetaspaceSize都是什么意思?
    原文链接:JAVA中的Xms、Xmx、MetaspaceSize、MaxMetaspaceSize都是什么意思?–每天进步一点点(longkui.site)某天需要修改一个web服务器的配置文件,看到了下面这样一行配置JAVA_OPTS="-Xms64m-Xmx512m-XX:MetaspaceSize=64M-XX:MaxMetaspaceSize=512m-Djava.net.preferIPv......
  • JavaScript中的对象,常用内置对象和数据类型
    一、对象1.概念什么是对象?在JavaScript中,对象是一组无序的相关属性和方法集合,所有的事物都是对象,例如:字符串、数值、数组和函数等等。对象是由属性和方法组成的。属性:事物的特征,在对象中属性来表示(常用名词)方法:事物的行为,在对象中用方法来表示(常用动词)手机: 属性—......
  • vue-java分享源码基于Spring Boot框架的学生作业课程管理系统的设计与实现
    目录功能和技术介绍系统实现截图本项目源码获取地址下载开发核心技术介绍:为什么选择最新的Vue与SpringBoot技术核心代码部分展示功能和技术介绍SpringBoot和Vue作为当前主流的技术框架,具有开发效率高、安全性强、用户体验良好等优点。使用开源的SpringBoot框架进行......
  • 基于springboot的某学院勤工俭学岗位兼职平台设计与实现java+vue毕业设计源码
    目录为什么选择最新的Vue与SpringBoot技术功能和技术介绍系统实现截图本项目源码获取地址下载开发核心技术介绍:可行性分析核心代码部分展示为什么选择最新的Vue与SpringBoot技术在本系统由众多子功能模块构成,每个模块各司其职,合作构成整体,这也解释了为何选择采用最......
  • java实现简易计算器
    写一个计算器,实现简单的加减乘除,要求有用户交互。思路:四个方法利用循环,switch输出importjava.util.Scanner;publicclassJiSuanQi{//定义加法、减法、乘法、除法方法publicstaticdoubleadd(doublea,doubleb){returna+b;}publicstaticd......
  • 设计模式--Java面试题
    目录什么是设计模式?你是如何理解设计模式的?设计模式的理解:设计模式的分类:如何使用设计模式:面对一个具体问题,你如何决定使用哪种设计模式?一些常见的问题和对应的设计模式:我想了解在实际项目中如何应用设计模式,有没有具体的案例可以分享?解释创建型、结构型和行为型设计模式的区......
  • 0基础学java之Day06(下午完整版)
       需求1:打印以下图形      ****      ****      ****      for(inti=0;i<3;i++){//控制行数         for(intj=0;j<4;j++){//控制列数            System.out.print("*");//打印一个一个的星号(......
  • 【Java 22 | 3】 深入解析Java 22 :轻量级线程
    Java22轻量级线程特性详细介绍基础介绍轻量级线程(VirtualThreads)是Java平台在Java19中引入的特性,目的是简化并发编程并提高应用程序的可伸缩性。在Java22中,轻量级线程得到了进一步的完善,使得开发者能够更方便地创建和管理大量并发任务。轻量级线程的特点高......
  • 深入理解 JavaScript 异步:掌握 Promise、Async/Await 与 Promise.all 全指南
    博文:深入理解JavaScript中的Promise、await、.then()和Promise.all()在现代JavaScript中,处理异步操作时,Promise、async/await和Promise.all()是关键工具。本文将深入讲解它们的用法及实现,并结合实际例子。1.Promise的基本使用Promise是一种处理异步操作的方式。......
  • Java毕业设计-基于SSM框架的在线学习系统项目实战(附源码+论文)
    大家好!我是岛上程序猿,感谢您阅读本文,欢迎一键三连哦。......