page contents
Nen
Nen - 程序员

性别: 天津 - 天津市 注册于 2021-06-23

向TA求助
2850金币数
43180 经验值
1个粉丝
主页被访问 6256 次

3096 个回答

0 赞同

Java 中你怎样唤醒一个阻塞的线程?

首先 ,wait()、notify() 方法是针对对象的,调用任意对象的 wait()方法都将导致线程阻塞,阻塞的同时也将释放该对象的锁,相应地,调用任意对象的 notify()方法则将随机解除该对象阻塞的线程,但它需要重新获取该对象的锁,直到获取成功才能往下执行; 其次,wait、notify 方法必须在 synchronized 块或方法中被调用,并...

回答于 2022-04-12 14:26

0 赞同

如何在两个线程间共享数据?

在两个线程间共享变量即可实现共享。 一般来说,共享变量要求变量本身是线程安全的,然后在线程内使用的时候,如果有对共享变量的复合操作,那么也得保证复合操作的线程安全性。

回答于 2022-04-12 14:21

0 赞同

Java 如何实现多线程之间的通讯和协作?

可以通过中断 和 共享变量的方式实现线程间的通讯和协作 比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空...

回答于 2022-04-12 14:21

0 赞同

你对线程优先级的理解是什么?

每一个线程都是有优先级的,一般来说,高优先级的线程在运行时会具有优先权,但这依赖于线程调度的实现,这个实现是和操作系统相关的(OS dependent)。我们可以定义线程的优先级,但是这并不能保证高优先级的线程会在低优先级的线程前执行。线程优先级是一个 int 变量(从 1-10),1 代表最低优先级,10 代表最高优先级。 Jav...

回答于 2022-04-12 14:20

0 赞同

Java 线程数过多会造成什么异常?

线程的生命周期开销非常高 消耗过多的 CPU 资源如果可运行的线程数量多于可用处理器的数量,那么有线程将会被闲置。大量空闲的线程会占用许多内存,给垃圾回收器带来压力,而且大量的线程在竞争 CPU资源时还将产生其他性能的开销。 降低稳定性JVM 在可创建线程的数量上存在一个限制,这个限制值将随着平台的不同而不同,...

回答于 2022-04-12 14:20

0 赞同

一个线程运行时发生异常会怎样?

如果异常没有被捕获该线程将会停止执行。Thread.UncaughtExceptionHandler是用于处理未捕获异常造成线程突然中断情况的一个内嵌接口。当一个未捕获异常将造成线程中断的时候,JVM 会使用 Thread.getUncaughtExceptionHandler()来查询线程的 UncaughtExceptionHandler 并将线程和异常作为参数传递给 handler 的 uncaughtExce...

回答于 2022-04-12 14:20

0 赞同

创建线程池有哪几种方式?

线程池创建有七种方式,最核心的是最后一种: newSingleThreadExecutor()它的特点在于工作线程数目被限制为 1,操作一个无界的工作队列,所以它保证了所有任务的都是被顺序执行,最多会有一个任务处于活动状态,并且不允许使用者改动线程池实例,因此可以避免其改变线程数目; newCachedThreadPool()它是一种用来处理大量...

回答于 2022-04-12 14:19

0 赞同

线程池都有哪些状态?

RUNNING这是最正常的状态,接受新的任务,处理等待队列中的任务。 SHUTDOWN不接受新的任务提交,但是会继续处理等待队列中的任务。 STOP不接受新的任务提交,不再处理等待队列中的任务,中断正在执行任务的线程。 TIDYING所有的任务都销毁了,workCount 为 0,线程池的状态在转换为 TIDYING 状态时,会执行钩子方法 term...

回答于 2022-04-12 14:19

0 赞同

线程池中 submit() 和 execute() 方法有什么区别?

execute():只能执行 Runnable 类型的任务。 submit():可以执行 Runnable 和 Callable 类型的任务。 Callable 类型的任务可以获取执行的返回值,而 Runnable 执行无返回值。

回答于 2022-04-12 14:19

0 赞同

线程类的构造方法、静态块是被哪个线程调用的?

这是一个非常刁钻和狡猾的问题。请记住:线程类的构造方法、静态块是被 new这个线程类所在的线程所调用的,而 run 方法里面的代码才是被线程自身所调用的。 如果说上面的说法让你感到困惑,那么我举个例子,假设 Thread2 中 new 了Thread1,main 函数中 new 了 Thread2,那么: Thread2 的构造方法、静态块是 main 线程调...

回答于 2022-04-11 13:53