package com.hym.test.thread;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class ThreadCondition {
public static void main(String[] args) {
final Business business = new Business();
new Thread(new Runnable() {
@Override
public void run() {
threadExecute(business, "sub");
}
}).start();
threadExecute(business, "main");
}
public static void threadExecute(Business business, String threadType) {
for (int i = 0; i < 100; i++) {
try {
if ("main".equals(threadType)) {
business.main(i);
} else {
business.sub(i);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Business {
private boolean bool = true;
private Lock lock = new ReentrantLock();
private Condition condition = lock.newCondition();
public/* synchronized */void main(int loop) throws InterruptedException {
lock.lock();
try {
while (bool) {
condition.await();// this.wait();
}
for (int i = 0; i < 100; i++) {
System.out.println("main thread seq of " + i + ", loop of "
+ loop);
}
bool = true;
condition.signal();// this.notify();
} finally {
lock.unlock();
}
}
public/* synchronized */void sub(int loop) throws InterruptedException {
lock.lock();
try {
while (!bool) {
condition.await();// this.wait();
}
for (int i = 0; i < 10; i++) {
System.out.println("sub thread seq of " + i + ", loop of "
+ loop);
}
bool = false;
condition.signal();// this.notify();
} finally {
lock.unlock();
}
}
}
分享到:
相关推荐
#### 一、Java线程:概念与原理 - **操作系统中线程和进程的概念** 当前的操作系统通常都是多任务操作系统,多线程是一种实现多任务的方式之一。在操作系统层面,进程指的是内存中运行的应用程序,每个进程拥有...
这个"Java线程通信示例源代码"很可能包含了演示如何在不同线程之间共享数据和协调执行顺序的实例。线程通信主要涉及两个核心概念:同步和互斥。 1. **线程同步**:线程同步是为了防止多个线程同时访问共享资源,...
总的来说,理解和掌握Java线程的创建、运行、同步以及线程安全,是成为一名合格的Java开发者必不可少的技能。通过学习和实践,开发者可以编写出更加高效、健壮的多线程应用程序,以应对复杂的并发编程挑战。
创建Java线程主要有两种方式: 1. 继承Thread类:创建Thread的子类并重写run()方法,然后通过调用start()方法启动线程。 2. 实现Runnable接口:创建一个实现了Runnable接口的类,实现run()方法,然后将该类的实例...
Java线程、网络和图形用户界面是Java编程中的三大核心领域,它们构成了Java应用程序的基础架构。下面将分别详细探讨这三个方面的重要知识点。 首先,我们来了解Java线程。线程在计算机科学中是指程序执行的一个独立...
2. Condition接口:配合Lock使用,提供更灵活的线程间通信方式。 五、线程池 1. Executor框架:Java 5引入的ExecutorService接口,它是线程池的核心,ThreadPoolExecutor是其具体实现。 2. ThreadPoolExecutor参数...
此外,Java中的java.util.concurrent.locks.Condition接口提供了条件变量的实现,可以用来控制线程之间的协作。 除了上述核心概念和工具类,Java 5.0引入了并发工具类如CountDownLatch、CyclicBarrier、Semaphore等...
`ReentrantLock`是Java并发编程中的一种重要工具,它允许线程在已经获取锁的情况下再次获得同一把锁,而不必等待解锁。这在处理递归调用或嵌套锁的场景中特别有用。`ReentrantLock`提供了一种可选的公平策略,即线程...
2. **线程同步**:为了解决多线程中的数据安全问题,Java提供了多种同步机制,如`synchronized`关键字、`volatile`变量、`Lock`与`Condition`接口、`ReentrantLock`等。这些内容在书中会有详细讲解,包括它们的工作...
- 使用Condition接口提供的await()、signal()和signalAll()方法在java.util.concurrent.locks包中的实现类也可以实现线程间的通信。 10. Java中的并发集合类有哪些? - java.util.concurrent包中提供了一些线程...
创建Java线程主要有两种方式:继承Thread类和实现Runnable接口。继承Thread类可以直接重写run()方法,而实现Runnable接口则需要提供一个包含业务逻辑的run()方法,并通过构造Thread对象传入该Runnable实例。后者更为...
在Java编程中,多线程是一种常见的并发处理方式,它能充分利用CPU资源,提高程序的执行效率。本示例主要探讨了如何通过两种方法来控制Java中的线程数量,以达到优化性能和防止内存不足的目的。 首先,我们来看...
以上就是对Java线程中wait、await、sleep、yield、join用法的总结。这些方法在实际开发中,对于控制多线程运行的时序和协调非常关键。理解这些方法的正确使用方式是掌握Java并发编程的基础。同时,使用时需特别注意...
Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,提高了系统的效率和响应性。在Java中,多线程的实现主要通过两种方式:继承Thread类和实现Runnable接口。理解并掌握多线程的使用对于任何Java开发者...
- Condition接口:在ReentrantLock中,Condition提供了更细粒度的线程唤醒控制。 5. **线程池** - Executors框架:Java 5引入的线程池API,提供ExecutorService、ScheduledExecutorService等接口,可以更高效地...
Java线程有多种状态,主要包括: 1. **New(新建)**:当使用`new`关键字创建一个新的线程对象但尚未调用`start()`方法时,线程处于New状态。 2. **Runnable(可运行)**:一旦调用了`start()`方法,线程便进入...
同样,在`ServiceThread`中,我们可能使用`Object.wait()`和`Object.notify()`或者`Condition`来实现线程间的同步,确保每次只有一个客户正在接受服务。 ```java public class CustomerThread extends Thread { ...
5. **ReentrantLock和Condition**:如果不想使用`synchronized`关键字,可以使用`java.util.concurrent.locks.ReentrantLock`和`Condition`接口,它们提供了更细粒度的锁控制和更灵活的等待/通知机制。 6. **死锁和...
Java线程是Java编程语言中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,线程是程序执行的最小单元,由JVM(Java虚拟机)来管理和调度。这篇文档集合,包括"OReilly.Java...