public class TestThread {
int count=0;
Object lock=new Object();
transient boolean isWorking=true;
Thread t1=new Thread(){
public void run() {
while(true){
try {
if(count++%10==0){
System.out.println("睡觉");
isWorking=false;
synchronized (lock) {
lock.wait();
}
isWorking=true;
System.out.println("睡醒了");
}else{
System.out.println("睡"+count);
Thread.sleep(100);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
};
Thread t2=new Thread(){
public void run() {
while (true) {
try {
if(!isWorking){
System.out.println("醒醒啦!");
synchronized (lock) {
lock.notify();
}
}
Thread.sleep(2000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
};
public TestThread() {
t1.start();
t2.start();
}
public static void main(String[] args) {
new TestThread();
}
}
public class TestThread {
int count=0;
Object lock=new Object();
transient boolean isWorking=true;
Thread t1=new Thread(){
public void run() {
while(true){
try {
if(count++%10==0){
System.out.println("睡觉");
isWorking=false;
synchronized (lock) {
lock.wait();
}
isWorking=true;
System.out.println("睡醒了");
}else{
System.out.println("睡"+count);
Thread.sleep(100);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
};
Thread t2=new Thread(){
public void run() {
while (true) {
try {
if(!isWorking){
System.out.println("醒醒啦!");
synchronized (lock) {
lock.notify();
}
}
Thread.sleep(2000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
};
public TestThread() {
t1.start();
t2.start();
}
public static void main(String[] args) {
new TestThread();
}
}
分享到:
相关推荐
- **`wait()`, `notify()`和`notifyAll()`方法**: 用于线程间的通信,让线程等待或唤醒其他线程。 6. **线程组** 线程可以组织成线程组,方便管理,比如可以一次性启动或停止一组线程。 7. **幽灵线程(Demon ...
阻塞状态通常发生在线程等待I/O操作完成、调用sleep()方法、等待锁释放或者调用join()方法等待其他线程结束时。 在`threadTest`这个案例中,我们可能会看到如何使用这些概念来创建实际的应用场景。例如,一个典型的...
因此,理解并熟练掌握Java线程的原理和实践是非常重要的。 本文档("Java线程学习和总结.htm")可能包含了更多关于线程的实例、源码分析和常见问题解决方案,你可以通过阅读来进一步加深对Java线程的理解。同时,...
- `join()`方法:让当前线程等待另一个线程完成其执行。 4. **线程优先级与调度**:Java的`Thread`类提供了设置线程优先级的方法,如`setPriority(int priority)`,但实际线程调度依赖于操作系统的策略,优先级并...
Java线程有五种基本状态:新建(New)、可运行(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Terminated)。这些状态之间的转换是通过调用特定的方法,如start()、sleep()、join()、wait()、notify()等...
通过阅读《Java线程》这本书,开发者可以深入了解Java并发编程的原理和实践,提升编写高并发、高可用系统的能力。同时,书中的实例和最佳实践将帮助读者在实际项目中避免常见的并发问题,提高代码质量和系统的稳定性...
- **join()**:让当前线程等待指定线程完成。 - **sleep()**:使当前线程暂停执行一段时间。 - **yield()**:让当前线程暂停,让其他相同优先级的线程有机会执行。 - **interrupt()**:中断线程,标记线程的中断...
Java 多线程原理 Java 多线程原理是一种基于 Java 语言的多线程编程技术,旨在提高程序的执行效率和响应速度。该技术可以使程序同时执行多个任务,从而提高系统的整体性能。 多线程编程的重要概念 1. 进程...
Java线程有10个优先级,从`MIN_PRIORITY`(1)到`MAX_PRIORITY`(10),默认是`NORM_PRIORITY`(5)。优先级高的线程更可能被调度执行,但不保证。 4. **线程同步** 当多个线程访问共享资源时,可能会出现竞态条件,...
#### 一、Java线程:概念与原理 - **操作系统中线程和进程的概念** 当前的操作系统通常都是多任务操作系统,多线程是一种实现多任务的方式之一。在操作系统层面,进程指的是内存中运行的应用程序,每个进程拥有...
- **join()**:使当前线程等待指定线程结束后再继续执行。 - **yield()**:让当前线程暂停,给其他可运行线程一个执行机会,但不保证一定能切换。 - **interrupt()**:中断线程,标记线程的中断状态,对于阻塞...
3. `keepAliveTime`: 当线程数超过核心线程数时,空闲线程等待新任务的最长时间,超时会被终止。 4. `unit`: keepAliveTime的时间单位。 5. `workQueue`: 任务队列,用于存储待执行的任务。常见的有`...
#### 一、Java线程:概念与原理 现代操作系统都是多任务操作系统,其中多线程是一种重要的实现多任务的方式。线程是进程内的一个执行单位,一个进程可以包含多个线程。例如,在Java应用程序中(如`java.exe`),...
### Java线程教程知识点梳理 #### 一、教程概述 - **目标读者**: 本教程主要面向具备丰富Java基础知识但缺乏多线程编程经验的学习者。 - **学习成果**: 学习者能够掌握编写简单的多线程程序的能力,并能够理解和...
#### 一、Java线程:概念与原理 1. **操作系统中线程和进程的概念** - 当前的操作系统通常为多任务操作系统,多线程是实现多任务的一种手段。 - **进程**:指内存中运行的应用程序,每个进程拥有独立的内存空间。...
总的来说,Java线程适合CPU密集型任务,能充分利用硬件资源,但面临上下文切换和同步问题;而协程则在IO密集型任务中表现出色,拥有更高的并发性和更低的开销。开发者应根据具体应用场景选择合适的并发模型,以优化...
本文将深入探讨Java线程停止的方法,特别是通过一个示例代码片段来解析如何利用标志变量(Flag)控制线程的生命周期,以及这种方法背后的原理与最佳实践。 ### Java线程停止方法概述 在Java中,直接调用线程的`...
通过以下详细解释,你可以深入了解Java多线程的原理和实践。 1. **Thread类**:在Java中,创建线程最直接的方式是继承Thread类。当子类化Thread后,你需要覆盖`run()`方法,将需要并发执行的任务写在这个方法内。...
Java多线程服务器原理主要涉及Java编程中的并发处理和服务器设计。在计算机科学中,特别是在网络编程领域,多线程技术对于实现高效能的服务器应用至关重要。Java语言提供了丰富的多线程支持,使得开发者能够轻松地...