package com.test;
public interface IBuffer {
public void write();
public void read() throws InterruptedException;
}
package com.test;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class BufferInterruptibly implements IBuffer {
//ReentrantLock :可在一个方法中获取 在令一个方法中释放的锁
private Lock lock = new ReentrantLock();
public void write() {
lock.lock();
try {
long startTime = System.currentTimeMillis();
System.out.println("开始往这个buff写入数据…");
for (;;)// 模拟要处理很长时间
{
if (System.currentTimeMillis() - startTime > Integer.MAX_VALUE)
break;
}
System.out.println("终于写完了");
} finally {
lock.unlock();
}
}
public void read() throws InterruptedException{
/**
* lockInterruptibly()方法,说明该线程调用该read方法时可以被中断,不比等待write方法结束 释放锁
* lock()方法 说明 read方法 和write 保持同一把锁 ,只有write方法释放该锁 read方法才可操作 否则持续登录 直到获取该锁
*/
lock.lockInterruptibly();// 注意这里,可以响应中断
//lock.lock() ;
try {
System.out.println("从这个buff读数据");
} finally {
lock.unlock();
}
}
}
package com.test;
public class Test {
public static void main(String[] args) {
IBuffer buff = null;
buff = new BufferInterruptibly();
final Writer writer = new Writer(buff);
final Reader reader = new Reader(buff);
writer.start();
try {
Thread.sleep(2000) ;
} catch (InterruptedException e) {
e.printStackTrace();
}
reader.start();
new Thread(new Runnable() {
public void run() {
long start = System.currentTimeMillis();
for (;;) {
// 等5秒钟去中断读
if (System.currentTimeMillis() - start > 5000) {
System.out.println("不等了,尝试中断");
reader.interrupt();
break;
}
}
System.out.println("检测终端线程结束");
}
}).start();
}
}
class Writer extends Thread {
private IBuffer buff;
public Writer(IBuffer buff) {
this.buff = buff;
}
@Override
public void run() {
System.out.println("write线程开始。。。");
buff.write();
System.out.println("write线程结束!");
}
}
class Reader extends Thread {
private IBuffer buff;
public Reader(IBuffer buff) {
this.buff = buff;
}
@Override
public void run() {
try {
System.out.println("read线程开始...");
buff.read();
} catch (InterruptedException e) {
System.out.println("我不读了");
}
System.out.println("read结束!");
}
}
运行结果:
write线程开始。。。
开始往这个buff写入数据…
read线程开始...
不等了,尝试中断
我不读了
read结束!
检测终端线程结束
分享到:
相关推荐
《深入学习:Java多线程编程》是一本专注于Java并发技术的专业书籍,旨在帮助开发者深入理解和熟练运用Java中的多线程编程。Java多线程是Java编程中的核心部分,尤其在现代高性能应用和分布式系统中不可或缺。理解并...
通过学习和实践这个项目,你可以深入理解多线程的基本原理,以及如何将它们应用到实际的聊天室程序中。同时,也可以在此基础上进一步扩展功能,例如实现更复杂的用户认证、消息加密、文件传输等特性,提升你的编程...
这份"Java多线程编程核心技术学习资料"正是针对这一主题提供的一份宝贵的学习资源,适合初、中级Java开发人员提升自己的多线程编程技能。 在Java中,多线程主要通过以下方式实现: 1. 继承Thread类:创建一个新的...
在Java编程语言中,多线程是核心特性之一,它允许程序同时执行多个任务,从而提高了应用程序的效率和响应性。对于大型的网络应用,尤其是涉及文件下载的场景,使用多线程技术可以显著提升用户体验,分段下载数据并行...
《JAVA多线程教学演示系统》是一篇深入探讨JAVA多线程编程的论文,它针对教育领域中的教学需求,提供了一种生动、直观的演示方式,帮助学生更好地理解和掌握多线程技术。这篇论文的核心内容可能包括以下几个方面: ...
1. 同步机制:为了解决多线程并发访问共享资源导致的数据不一致问题,Java提供了synchronized关键字、Lock接口(如ReentrantLock)以及相关的并发工具类。 2. synchronized:用于修饰方法或代码块,实现互斥访问。...
这份“JAVA多线程编程技术PDF”是学习和掌握这一领域的经典资料,涵盖了多线程的全部知识点。 首先,多线程的核心概念包括线程的创建与启动。在Java中,可以通过实现Runnable接口或继承Thread类来创建线程。创建后...
Java多线程设计模式是Java开发中的核心概念,它涉及到如何高效、安全地在多个执行线程之间共享资源和协调任务。...通过阅读《java多线程设计模式》这本书,你可以深入理解这些概念,并学习到更多实际应用的案例。
本压缩包“多线程示例.rar”提供了相关的学习材料,适合对多线程感兴趣的开发者进行深入研究。 首先,我们要理解多线程的基本概念。在单核CPU系统中,多线程是通过时间片轮转的方式实现的,系统会快速切换线程的...
在Java编程中,多线程并发是提升程序执行效率、充分利用多核处理器资源的重要手段。本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多...通过不断学习和实践,我们可以编写出高效、安全的多线程并发程序。
在Java编程语言中,实现多线程文件传输是一种优化程序性能、提高系统资源...在提供的`java多线程文件传输`压缩包中,可能包含了实现这些概念的示例代码,通过分析和学习,可以更好地理解多线程文件传输的原理和实践。
通过深入学习这本书,开发者不仅能理解Java多线程的底层机制,还能掌握如何在实际项目中有效利用多线程技术,提升代码的并发性和可维护性。对于想要在Java并发领域进一步提升的开发者来说,这是一本不可多得的参考...
### Java多线程小结 #### 一、多线程的概念与意义 多线程是Java编程中的一个重要概念,指的是程序在运行时可以同时执行多个线程的能力。它能够提高程序的性能,尤其是在多核处理器的环境下。多线程使得程序能够更...
总的来说,"JAVA编写的多线程小弹球测试"项目涵盖了Java多线程、GUI编程、随机数生成和颜色处理等多个重要知识点,是学习和实践Java并发编程的好案例。通过这个项目,开发者不仅可以锻炼到编程技巧,还能深入理解...
Java多线程与同步是Java编程中的核心概念,它们在构建高效、响应迅速的应用程序时起着至关重要的作用。在大型系统开发中,多线程技术使得程序能够同时执行多个任务,提高系统的并发性,而同步机制则确保了在多线程...
Java的多线程能力是其强大之处,使得开发者能够在同一时间执行多个任务,提高程序效率。本指南将通过实例分析和实践演练,让你深入理解多线程的原理与应用。 首先,我们要了解Java中的线程模型。Java通过Thread类来...
Java多线程与锁是Java并发编程中的核心概念,它们在构建高效、可扩展的并发应用程序中起着至关重要的作用。下面将详细讲解这两个主题。 首先,Java中的多线程是指程序执行时可以同时进行多个任务。这得益于操作系统...
通过学习和掌握以上Java多线程的知识点,你将能够编写出更加健壮、高效的多线程程序,有效应对并发场景下的各种挑战。在实际开发中,结合具体业务需求,灵活运用这些概念和工具,可以大大提高代码质量和系统性能。
本资源是由知名讲师张孝祥老师提供的关于多线程的实例教程,旨在帮助学习者深入理解和熟练掌握Java多线程的相关知识。通过这份资料,你将有机会接触到各种线程类的实例,从而提升你的编程能力。 1. **Java多线程...
下面是对Java多线程学习的详细解析。 1. **多线程概述**: 多线程是指一个程序内可以同时执行多个独立的执行流,每个执行流被称为一个线程。Java通过Thread类来代表线程,每个线程都有自己的生命周期,包括新建、...