package com.ijo.server;
/**
* 经测试分析当线程处于 运行和阻塞状态 isAlive都返回 true 依次类推当处于死锁也是一样的
* 故可以作为线程是否被正在使用的判断依据,是离线程池判断又进一步的了
* @author Administrator
*
*/
public class ThreadAliveDemo {
public static void main(String[] args) throws InterruptedException {
Work work = new Work();
System.out.println("start before " + work.isAlive());
work.start();
System.out.println("start after " + work.isAlive());
Thread.sleep(2000);
System.out.println("runing finshed " + work.isAlive());
work.notifyWork();
System.out.println("notify " + work.isAlive());
}
}
class Work extends Thread {
@Override
public void run() {
synchronized (this) {
try {
Thread.sleep(1000);
wait();
System.out.println("run .....");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void notifyWork() {
synchronized (this) {
notify();
}
}
}
运行结果:
start before false
start after true
runing finshed true
run .....
notify false
分享到:
相关推荐
线程、多线程和线程池面试专题 一、线程的概念和创建方式 ... // 判断当前线程是否被中断 public boolen isInterrupt(); // 清除当前线程的中断状态,并返回之前的值 public static boolen interrupted(); }
线程可以通过调用`interrupt()`方法来中断,而被中断的线程可以通过检测`isInterrupted()`的状态来判断是否已经被中断。 #### 八、总结 Java多线程编程是Java开发者必须掌握的一项重要技能。它不仅可以提高程序的...
当用户再次启动下载时,根据这些信息判断是否需要从头开始,还是从上次中断的位置继续。 3. **网络请求库**: 实现多线程下载,可以使用如OkHttp、Volley或者Retrofit等网络请求库。它们支持异步请求,可以方便地...
- 通过分析线程状态,判断是否存在死锁。 - **查看线程状态**: - 死锁通常发生在两个或多个线程互相等待对方持有的锁。 - 查看线程等待锁的情况,识别死锁环路。 #### 十七、死锁产生的条件 - **互斥条件**: ...
根据给定文件的信息,我们可以提炼出以下...这些知识点涵盖了线程池的基本原理、字典的合并技巧、GUI与GPL的概念介绍、网络爬虫的工作流程以及处理反爬措施的方法等多个方面,对于准备Python面试的求职者来说非常实用。
- 判断线程是否可结合:joinable()函数用于检查线程是否可以被join(),即它是否正在运行。 - 获取线程ID:每个std::thread对象都有一个ID,可以通过get_id()方法获取。 - 线程本地存储:std::thread支持线程局部存储...
首先,端口扫描器的基本原理是通过向目标主机发送特定的网络数据包,如TCP的SYN或UDP的空数据包,然后根据响应来判断目标端口是否开放。开放的端口通常意味着对应的服务正在监听并准备接收连接。扫描器通常会遍历预...
当提交任务时,线程池会根据当前的工作队列状态和线程状态决定是否立即执行任务或将其放入队列等待。 - **调度过程**:线程池会根据核心线程数创建线程,并将任务分配给这些线程。如果任务数超过了核心线程数但不...
5. **线程安全**:了解什么是线程安全,以及如何判断一个类或方法是否线程安全。线程安全的类如`Atomic`系列、`ConcurrentHashMap`等。 6. **并发集合**:Java提供了线程安全的集合,如`CopyOnWriteArrayList`、`...
- **Tidying**:所有任务完成后,线程池准备终止。 - **Terminated**:线程池完全终止,terminated()方法执行完毕。 3. **JDK、JRE、JVM的区别**: - **JDK**:包含编译器javac、JRE以及开发所需的类库,用于...
4. 控制流程:掌握if语句、switch语句、for循环、while循环的使用,理解条件判断和迭代控制。 二、面向对象 1. 类与对象:理解类的定义、对象的创建以及封装的概念。 2. 继承:了解单一继承的特点,以及如何通过`...
37. **线程池设计模式**:通常使用工作队列实现,如Java的ExecutorService。 38. **线程池使用考虑**:任务类型、系统资源、响应时间等因素。 39. **一致性Hash**:分布式系统中负载均衡的算法,确保数据分布均匀...
- `boolean isHeldByCurrentThread()`:判断当前线程是否持有该锁。 - `void unlock()`:释放锁,必须由持有锁的线程调用。 **1.2 中断响应 `lockInterruptibly()`** - 当前线程在等待锁的过程中可以被中断,这...
- **如何判断对象是否可以被回收**:可达性分析算法。 - **垃圾回收算法**:标记-清除、复制、标记-整理等。 - **垃圾回收器**:Serial、ParNew、CMS等。 - **分代垃圾回收器的工作原理**:年轻代与老年代分别采用...
180多页面试题,前前后后不间断的更新了两年,准备换工作时,总是拿来看看,有比较好的面试题,也不间断的更新,面试题目录如下: 【基础】面向对象的特征有哪些方面 13 抽象 13 继承 13 封装 13 多态性 13 【基础】...
- **算法**:Java中的垃圾回收机制通过跟踪GC Roots可达的对象来判断一个对象是否可被回收。 - **对象回收**:如果一个对象从GC Roots不可达,则被视为垃圾,等待被回收。 ### 5. 框架与中间件 #### Spring框架 - ...
例如,可能会有对垃圾回收机制的理解,如如何判断一个对象是否可被回收,或者深入探讨Java内存模型。还有可能是关于JVM(Java虚拟机)的问题,比如类加载机制、内存区域划分、性能优化等。此外,可能会有设计模式的...