java面试题——多线程01

发布时间:2024年01月21日
1.java中线程的实现方式?

常见的一般是4种:

  1. 继承Thread类
  2. 实现Runnable接口
  3. 通过callable接口,实现有返回值的线程
  4. 基于线程池的实现

image-20240121112624431

虽说有四种,但究其根本,其实都是实现的Runnable接口

2.java中线程的状态?

操作系统层面:就传统的线程状态来说有5种状态

新建(new)、就绪(ready)、运行(running)、等待(waiting)、结束(terminated)

image-20240121205815069

java中有6种状态

新建、就绪/运行、阻塞、等待、时间等待、结束

image-20240121205845136

3.java中如何停止线程?

有两种方法:第一种是使用interrupt方式,也是比较推荐的方式

Thread.currentThread().interrupt()

执行该方法之后,线程并不会马上停止,而是将一个中断标记位设置为了true,由线程自己停止

第二种:使用全局变量的方式。

static volatile boolean flag = true;

public static void main(String[] args) throws InterruptedException{
	Thread t1 = new Thread(()->{
		while(flag){
			//处理任务
		}
		System.out.println("任务结束");
	});
    t1.start();
    Thread.sleep(500);
    flag = false;
}
4.java中sleep和wait方法的区别?

sleep方法不需要别人唤醒,设置睡眠时间之后,自己醒来,继续执行,同时不会释放锁

wait方法需要别人唤醒,比如notify或者notifyAll方法,同时会释放锁

wait方法和sleep方法所在的类不同,wait方法在object类,sleep方法是Thread类中的static方法

5.并发编程的三大特性?

原子性、可见性、有序性

原子性的定义:原子性指一个操作是不可分割的,不可中断的,一个线程在执行时,另一个线程不会影响到它。

可见性:多核CPU的三级缓存都是独立的,只改自己的工作内存,没及时同步到主内存,导致数据不一致问题。

有序性:java文件在编译时,为了提升执行效率,对指令进行重排。(为了尽可能的发挥CPU的性能)

volatile可以解决可见性、有序性的问题,但并不能解决原子性问题

文章来源:https://blog.csdn.net/qq_37924905/article/details/135736278
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。