- 浏览: 1320640 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (896)
- spring4 (14)
- hibernate3 (26)
- spring2 (35)
- struts2 (55)
- struts1 (15)
- 设计模式 (15)
- java (172)
- mybatis3 (11)
- sql (17)
- mysql (13)
- jbpm (10)
- J2EE (45)
- tools (29)
- js (83)
- 数据结构 (13)
- Html (26)
- web (22)
- flex (33)
- Oracle (57)
- linux (49)
- 算法 (6)
- 其它 (12)
- easyui (1)
- bootstrap (13)
- xml (2)
- tomcat (1)
- redis (10)
- activemq (2)
- webservice (11)
- maven (2)
- springboot (1)
- ubuntu (1)
- python (14)
- rocketmq (1)
- springcloud (10)
- opencv (1)
最新评论
-
mike_eclipse:
Hashtable是线程不安全的吗?好像是线程安全的吧?
多线程之集合类 -
July01:
推荐用StratoIO打印控件,浏览器和系统的兼容性都很好,而 ...
lodop打印控件 -
xingcxb:
经过测试,假的,依旧会出现中文乱码!!!!store方法里面采 ...
java 读写Properties文件,不会出现中文乱码 -
tiger20111989:
...
Spring注解方式管理事务 -
zw7534313:
...
js 文字上下滚动 无间断循环显示
package cn.thread.fen;
import java.io.IOException;
public class FileReadThread extends Thread{
private CommThreadArgs args;
public FileReadThread(CommThreadArgs args){
this.args=args;
}
public void run() {
try {
synchronized(this) {
while (args.getLen()!=-1) { //读完整个文件,len=-1
if (args.getLen() != 0) {
wait(10);
}
else{
int length = args.getIs().read(args.getBuf(), 0, args.getBuf().length);
args.setLen(length);
System.out.println("----------"+length);
notify();
}
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
2.
package cn.thread.fen;
import java.io.IOException;
public class FileWriteThread extends Thread {
private CommThreadArgs args;
public FileWriteThread(CommThreadArgs args){
this.args=args;
}
public void run() {
synchronized(this){
while(true){
if(args.getLen()==0){
try {
wait(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
else{
System.out.println("*********"+args.getLen());
if(args.getLen()==-1){ //读线程结束,写线程也结束
try{
args.getIs().close();
args.getOs().close();
} catch (IOException e) {
e.printStackTrace();
}
break;
}
try {
args.getOs().write(args.getBuf(), 0, args.getLen());
// os.flush();
} catch (IOException e) {
e.printStackTrace();
}
args.setLen(0);
notify();
}
}
}
}
}
3.
package cn.thread.fen;
import java.io.FileInputStream;
import java.io.FileOutputStream;
//线程公用的同一个实例,共用参数
public class CommThreadArgs {
private FileInputStream is;
private volatile byte[] buf; //文件读写公用的缓存数据
private volatile int len = 0;//读取的字符长度,公用
private FileOutputStream os;
/**
*
*/
public static void main(String[] args) {
}
public synchronized FileInputStream getIs() {
return is;
}
public void setIs(FileInputStream is) {
this.is = is;
}
public synchronized byte[] getBuf() {
return buf;
}
public synchronized int getLen() {
return len;
}
public synchronized void setLen(int len) {
this.len = len;
}
public void setOs(FileOutputStream os) {
this.os = os;
}
public synchronized FileOutputStream getOs() {
return os;
}
public void setBuf(byte[] buf) {
this.buf = buf;
}
}
4.测试文件读写线程:
package cn.thread.fen;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class TestThread {
/**
*
*/
public static void main(String[] args) throws Exception {
CommThreadArgs ar=new CommThreadArgs();
File file = new File("E:\\Log\\bc2.txt");
int i=(int)(Math.random()*100);
File of = new File("E:\\Log\\"+i+".txt");
FileReadThread r = new FileReadThread(ar);
ar.setIs(new FileInputStream(file));
byte[] buf = new byte[512];
ar.setBuf(buf);
FileWriteThread w = new FileWriteThread(ar);
ar.setOs(new FileOutputStream(of));
r.start(); //起动读线程
w.start(); //起动写线程
Thread.currentThread().sleep(2000);
CommThreadArgs ar2=new CommThreadArgs();
File file2 = new File("E:\\Log\\814.txt");
int i2=(int)(Math.random()*100);
File of2 = new File("E:\\Log\\"+i2+".txt");
FileReadThread r2 = new FileReadThread(ar2);
ar2.setIs(new FileInputStream(file2));
byte[] buf2 = new byte[512];
ar2.setBuf(buf2);
FileWriteThread w2 = new FileWriteThread(ar2);
ar2.setOs(new FileOutputStream(of2));
r2.start(); //起动读线程
w2.start(); //起动写线程
}
}
发表评论
-
服务端推送multipart/x-mixed-replace
2023-12-07 15:26 403往网页分批推送数据:boundary=END,总头--> ... -
使用httpclient提交post请求
2020-08-22 08:35 473import org.apache.http.HttpEnt ... -
Groovy超强的Java动态计算能力
2020-06-25 09:03 685//Groovy超强的Java动态计算能力 groovy-2. ... -
bsh(BeanShell)动态执行java代码
2020-06-25 07:59 983import java.util.Date; /** * B ... -
延时任务处理订单超时方案
2020-05-23 16:05 1002JDK的延迟队列 方案是利用JDK自带的DelayQueue ... -
HttpsURLConnection
2020-04-29 10:51 850import java.net.URL; import jav ... -
Log4j的ConversionPattern参数的格式含义
2020-04-22 14:23 505Log4j的ConversionPattern参数的格式含义 ... -
thread 的join
2020-04-16 18:02 416java里面也有这个方法,Java Thread中, join ... -
GZIPOutputStream压缩文件
2020-04-16 17:52 790import java.io.BufferedReader; ... -
软引用SoftReference的使用
2020-04-16 15:48 581软引用SoftReference的使用 SoftRefere ... -
Fastjson
2020-04-15 14:53 401import java.util.ArrayList; imp ... -
6位随机数
2020-04-14 09:47 799import org.apache.commons.lang. ... -
Java加密和数字签名
2020-04-14 09:38 418Java加密和数字签名 消息摘要 这是一种与消息认证码结合使 ... -
DES加密、解密
2020-04-02 16:42 431import java.security.SecureRand ... -
Java利用 AES/ECB/PKCS5Padding 算法加解密
2020-04-02 11:19 1059对称加密、解密 import javax.crypto.Ci ... -
springboot中使用springmvc的拦截器-HandlerInterceptorAdapter
2018-12-13 16:04 1387springboot中使用springmvc的拦截器-Hand ... -
aspectj连接点
2018-12-13 15:55 599切点指示符 切点指示符 ... -
spring之AspectJ面向切面编程
2018-12-13 14:15 904spring之AspectJ面向切面编程 面向切面编程,实现 ... -
设计模式之策略模式
2018-05-30 21:17 556public class Person { priva ... -
使用反射将对象转Map
2018-05-27 17:33 724//使用反射将对象转Map<String, St ...
相关推荐
"多线程习题3.zip"可能是一个包含一系列多线程编程练习的压缩文件,用于帮助学习者提升在Java、Python、C++或其他支持多线程编程语言中的技能。 多线程允许一个程序同时执行多个任务,每个任务都在不同的线程上运行...
《第10章 多线程》主要涵盖了关于并发、并行、进程和线程的基础概念,以及如何在Java中创建和管理线程。以下是详细的知识点解析: 1. **并发与并行**: - **并发**:指的是在一段时间内,多个事件看似同时发生,但...
循环缓冲区(Circular Buffer)是一种在内存中实现的数据结构,常用于多线程环境下的数据共享,特别是当数据需要在不同线程之间高效地读写时。它利用数组或链表的形式,通过设定一个固定的存储区域,使得数据的读取...
在编程领域,多线程是实现并发执行任务的重要机制,特别是在多核处理器系统中,它能有效利用系统资源,提高程序的执行效率。本实例主要关注如何在Java中实现简单的多线程同步,以模拟一个售票系统的操作。在这个系统...
线程锁,又称为同步机制,是为了在多线程环境下保证数据的一致性和完整性而引入的,避免了多个线程同时访问共享资源可能导致的数据不一致问题。下面我们将深入探讨线程和线程锁的概念以及它们在实际应用中的使用。 ...
Java多线程机制是Java编程中的核心特性,它允许程序同时执行多个独立的任务,从而提高应用程序的效率和响应性。本文将深入探讨Java多线程的原理、设计模式以及重构方法,旨在帮助开发者更好地理解和优化多线程环境下...
这意味着Python的多线程并不能实现真正的并行计算,但在IO密集型任务中,线程可以交替执行,从而提高效率。 4. **进程与线程的选择**: - **进程**:当需要进行大量计算且不依赖共享数据时,使用进程更为合适,...
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程通过实现Runnable接口或继承Thread类来创建。下面我们将深入探讨Java多线程编程的核心...
线程安全是指当多个线程访问某个类时,无论运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要额外的同步措施,这个类都能表现出正确的行为。 volatile关键字用于声明变量,确保变量对...
- 死锁:是指两个或两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象。 - 避免死锁:可以通过资源分配有序、避免循环等待、限制锁的持有时间等策略来避免死锁。 - 活锁:与死锁类似,不过处于活锁...
并发编程是计算机科学中的一个重要领域,特别是在Java等多线程编程语言中,它涉及到如何在多个执行线程之间共享资源和协调任务。本面试专题主要针对高级并发编程的知识点进行探讨,旨在帮助求职者在面试中展现出深厚...
- **并发(Concurrency)**:是指在一段时间内,程序中的多个线程交替执行,给人一种同时执行的感觉。 - **并行(Parallelism)**:是指同一时刻有多个处理器分别执行不同的任务。 在Java并发编程中,我们通常关注的是...
线程是程序执行的最小单元,它允许在一个进程中并发执行多个任务。Java中,线程有两种实现方式:继承Thread类和实现Runnable接口。主线程由`main`方法所在的线程代表,可以通过`Thread.currentThread()`获取。启动...
在执行到一定时间后,CPU会暂停这个线程的工作,保存其当前状态,然后切换到另一个线程并恢复该线程的状态,这个过程就叫做上下文切换。上下文切换是多线程环境下操作系统调度线程的一种基本操作,它涉及到保存和...
本篇文档对后端开发中的关键知识点进行了全面而深入的梳理,涵盖了Java语言基础、JVM、操作系统、网络技术、数据库、缓存、多线程、Spring框架等方面的核心概念和技术要点。以下是针对文档标题、描述以及部分内容中...
线程死锁是指两个或多个线程在执行过程中,因争夺资源而造成的一种僵局。形成死锁的四个必要条件包括互斥条件、持有并等待条件、不可剥夺条件和循环等待条件。为了防止死锁,可以采用资源一次性分配、持有并等待条件...
- 并发与并行的区别:并发是指多个任务交替执行,而并行则是指多个任务在同一时刻执行。 - Java中的线程:Java通过`Thread`类提供了线程支持,开发者可以通过创建`Thread`实例或实现`Runnable`接口来创建线程。 -...
通过将程序分解成多个独立的任务,每个任务可以在不同的处理器上运行,或者在同一个处理器的不同时间片内交替执行,这样可以显著提高程序的整体执行效率。 #### 三、线程设施的设计 线程设施的设计是实现并发的...