多线程-请教:关于RandomAccessFile阻塞ScheduledExecutorService的问题

问题描述

请教:关于RandomAccessFile阻塞ScheduledExecutorService的问题
大家好,

我想实现 读一个正在动态增长的日志 的功能,下面第一段代码本够用了,可惜 那个日志还会不定时自动 归档(滚动,也就是 .log 变 *.log1 .log1变 *.log2 ,类推)

已经打开的 RandomAccessFile 仍然盯着最早关联的文件,无法识别关联到新生成的 *.log

所以我修改了这段代码,就是下面第二段代码

新的问题是:

程序已运行到 randomFile.close(); 处就卡住 ,不能进行了

想知道原因,我对多线程了解不多,请大家指点。谢谢了

final RandomAccessFile randomFile = new RandomAccessFile(logFilerw"");

ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);
exec.scheduleWithFixedDelay(new Runnable() {
public void run() {
try
{
RandomAccessFile randomFile = new RandomAccessFile(logFilerw"");

                                    randomFile.seek(lastTimeFileSize);                                    String tmp = """";                                    while ((tmp = randomFile.readLine()) != null)                                    {                                               //do something                                    }                            }                            catch (IOException e)                            {                                    throw new RuntimeException(e);                            }    ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);            exec.scheduleWithFixedDelay(new Runnable() {                    public void run() {                            try                             {                                    RandomAccessFile randomFile = new RandomAccessFile(logFilerw"");                                    randomFile.seek(lastTimeFileSize);                                    String tmp = """";                                    while ((tmp = randomFile.readLine()) != null)                                    {                                               //do something                                    }                                    //程序会停止到这个位置,无法进行下去,没有报任何异常或错误                                    //如果把 close() 给删除掉,程序就可以正常往下运行了                                    randomFile.close();                                                                                            }                            catch (IOException e)                            {                                    throw new RuntimeException(e);                            }                    }            } 0 10 TimeUnit.SECONDS);
时间: 2024-12-30 06:34:06

多线程-请教:关于RandomAccessFile阻塞ScheduledExecutorService的问题的相关文章

详解Java多线程编程中CountDownLatch阻塞线程的方法_java

直译过来就是倒计数(CountDown)门闩(Latch).倒计数不用说,门闩的意思顾名思义就是阻止前进.在这里就是指 CountDownLatch.await() 方法在倒计数为0之前会阻塞当前线程. CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. CountDownLatch 的作用和 Thread.join() 方法类似,可用于一组线程和另外一组线程的协作.例如,主线程在做一项工作之前需要一系列的准备工作,只有这些准备工

【多线程】python界面阻塞,白屏,not responding解决的简单例子

1 # -*- coding: utf-8 -*- 2 3 import sys, time 4 from PyQt4.QtCore import * 5 from PyQt4.QtGui import * 6 x = 0 7 class Window(QWidget): 8 def __init__(self, parent = None): 9 QWidget.__init__(self, parent)10 self.thread = Worker()11 12 # 提示信息13 self

java线程问题-关于分布式系统应用服务层的多线程

问题描述 关于分布式系统应用服务层的多线程 请教大神们一个问题: 分布式web系统中,web服务多线程一般由web容器自己管理,那当web服务调用应用层的逻辑服务时呢? 换句话说,web容器从线程池取出一个线程来处理一个请求,该请求通过action调用应用层的逻辑服务,这时候应用层的容器或框架来管理吗? 解决方案 看不懂你的问题呀,你想问的是什么呢?

阻塞队列BlockingQueue用法(转)

多线程环境中,通过队列可以很容易实现数据共享,比如经典的"生产者"和"消费者"模型中,通过队列可以很便利地实现两者之间的数据共享. 假设我们有若干生产者线程,另外又有若干个消费者线程.如果生产者线程需要把准备好的数据共享给消费者线程,利用队列的方式来传递数据,就可以很方便地解决他们之间的数据共享问题.但如果生产者和消费者在某个时间段内,万一发生数据处理速度不匹配的情况呢?理想情况下,如果生产者产出数据的速度大于消费者消费的速度,并且当生产出来的数据累积到一定程度的时

关于Webbrowser的线程问题

问题描述 Webbrowserws=newWebbrowser();ws.Navigate("[URL]");ws.DocumentComplet+=(sender,e)=>{代码区域};System.Thead.Sleep(1000); 我想知道Navigate这个方法是同步的还是异步的,还有代码区内的是运行在主线程还是Webbrowser新开了一个线程,Sleep方法是否阻塞了<代码区域>因为我想知道怎么样才能在运行完<代码区域>后执行Sleep()方

OSS报表系统实训笔记

笔记    OSS报表系统 实训笔记                   实训公司:中科天地 (王海格,老师超好)                                     Edited by Hen Egg ,Michelangelo 2005-2-21 8:00 JasperReport 开支 面向OO 应用服务器 Java 开源数据库 J2EE 需求分析     成绩: 课堂表现 项目     项目: l         Java平台 (1)       (编程语言)开发环境

Delphi 7中用Indy组件开发Socket应用程序

笔者在前一段的工作中,需要开发一套简单的网络数据传输程序.由于平时常用Delphi做点开发,故此次也不例外.Delphi 7中带有两套TCP Socket组件:Indy Socket组件(IdTCPClient和IdTCPServer)和Delphi原生的TCP Socket组件(ClientSocket和ServerSocket).但是,Borland已宣称ClientSocket和ServerSocket组件即将被废弃,建议用相应的Indy组件来代替.因此,笔者使用了Indy.本文在对Ind

一个简单的端口扫描程序题

一.TCP扫描技术 常用的端口扫描技术有很多种,如 TCP connect() 扫描 .TCP SYN 扫描.TCP FIN 扫描 等,网络上也有很多文章专门介绍,比如 :http://www.antai-genecon.com/suml/zhishiyy/jingong/duankougj.htm 上就介绍了很多我的程序 所使用的最基本的扫描技术:TCP 扫描. 操作系统提供的 connect() 系统调用,用来与每一个感兴趣的目标计算机的端口进行连接.如果端口处于侦听状态,那么connect

分析tpserver启动时偶发CPU飚升,甚至hsf线程池满

该文章来自阿里巴巴技术协会(ATA)精选集 序言 aliexpress(中文:速卖通)是个快速成长的国际化电商平台,肩负开拓海外市场的重任. 随着业务飞速膨胀(多语言.多币种.海外仓.分站.无线.区域化),网站代码也在不停增长,同时也在不停涌现新应用. 而本文的主角tpserver担当aliexpress的交易流程核心服务这一职责,虽然它最近才经历了一次拆分(逆向流程被剥离了出来),但还背负了各种历史包袱. 简单说就是tpserver提供33个接口的hsf服务,监听16种notify消息,1种m