import java.io.*;
import java.util.*;
import java.lang.*;
public class WorkTable
{
private Vector newWork;
private Vector assignedWork;
private String dirName;
class Refresher extends Thread {int refreshTime;Refresher(int x)
{
super("Refresher");
refreshTime = x;
}
public void run()
{
while(true) {
if(newWork.isEmpty())
{
populateTable();
}
try {
sleep(refreshTime);
} catch(Exception e)
{}}}}
WorkTable(String aWorkingDir)
{
newWork = new Vector();
assignedWork = new Vector();
dirName = aWorkingDir;
Refresher r = new Refresher(1000);
r.setDaemon(true);r.start();}
synchronized private void populateTable() {
File workingDir = new File(dirName);
String[] listOfFiles = workingDir.list();
if (listOfFiles.length != 0)
{
for (int i=0; i < listOfFiles.length; i++)
{
if(! assignedWork.contains(listOfFiles))
{
newWork.addElement( listOfFiles );
}
}
notifyAll();
}}
public void finishWork(String processedFile)
{
File f = new File(processedFile);
f.delete();
synchronized(this) {assignedWork.remove(processedFile);}}
public synchronized String getWork(String aThreadID)
{
while(true) {
if(newWork.isEmpty())try {
wait();
} catch(Exception e)
{}
else {
String fileName = (String)newWork.firstElement();
assignedWork.add(fileName);
try {newWork.removeElementAt(0);
}catch(ArrayIndexOutOfBoundsException ex){
return fileName;}
}
}
}
分享到:
- 2009-02-15 17:11
- 浏览 759
- 评论(0)
- 论坛回复 / 浏览 (0 / 1146)
- 查看更多
相关推荐
在C#编程中,线程安全是一个至关重要的概念,特别是在多线程环境下,它涉及到多个线程同时访问共享资源时的正确性和一致性。本项目提供了一系列的源代码示例,帮助开发者理解和实现线程安全。 首先,理解线程安全的...
4. **线程安全**:如果一个方法或数据结构在多线程环境下能正确工作,我们就称其为线程安全。线程安全可以通过设计、同步机制或使用线程安全的数据结构来实现。 在实践中,多线程编程还需要关注性能和资源消耗,...
本示例将探讨如何在Java中实现一个线程安全的订票系统。 首先,我们要理解什么是线程安全。线程安全是指当多个线程访问同一代码块时,即使这些线程是并发执行的,程序也能保持其正确性,即不会出现数据混乱或丢失的...
以下是一个简单的示例代码片段: ```csharp // 声明一个委托 public delegate void UpdateControlDelegate(string text); // 在其他线程中更新控件 private void UpdateControlFromOtherThread(string text) { if...
通过学习这个实例,你可以掌握如何创建和管理线程,理解线程同步与通信的重要性,以及如何处理线程安全问题。 1. **线程的创建** Java提供了两种创建线程的方式:继承`Thread`类和实现`Runnable`接口。在`lec22`中...
本示例主要涉及的是`QThread`类的使用,这是Qt提供的一个高级线程接口,用于实现线程的创建和管理。 首先,我们来看`QThread`的基本用法。在C++中,创建一个新的线程通常有两种方式:一是继承`QThread`类,二是使用...
下面是一个带参数的线程函数示例: ```csharp public class MultiThreadExampleWithArgs { public void RunWithParameter(object data) { // 创建一个新的线程并传入一个带参数的方法 Thread thread = new ...
为了保证线程安全,我们使用`std::mutex`和`std::condition_variable`进行同步。 工作线程的实现如下: ```cpp void ThreadPool::worker() { while (!stop) { std::function()> task; { std::unique_lock...
5. **线程安全**:在多线程环境中,访问共享资源必须是线程安全的。这意味着需要使用同步原语来保护对共享数据的访问,以避免数据竞争。 6. **线程优先级**:Delphi允许设置线程的优先级,但应谨慎使用,高优先级...
- 继承Thread类:创建一个新的类,继承自Thread类,重写其run()方法,然后创建该类的实例并调用start()方法。 - 实现Runnable接口:创建一个实现了Runnable接口的类,实现run()方法,然后将该类的实例传递给Thread...
在C#编程中,多线程是一个核心概念,它允许应用程序同时执行多个任务,从而提高程序的并发性和效率。在现代计算机系统中,多核处理器的普及使得多线程技术变得尤为重要。本示例将深入探讨C#中的多线程实现方法、应用...
此外,为了确保线程安全,当工作线程修改UI元素时,可能需要使用`CSingleLock`或`CMultiLock`来实现互斥访问,防止数据竞争。 总的来说,这个MFC用户界面线程创建示例教会我们如何在C++环境中有效地管理多线程,...
在LabWindows/CVI的`多线程_线程锁_线程安全变量`示例中,你可能会发现以下几个关键点: 1. **线程创建与销毁**:使用`cvCreateThread()` 创建线程,并通过`cvExitThread()` 结束线程。 2. **线程锁的使用**:在...
4. **线程安全**:确保在多线程环境中正确操作共享数据和对象。这可能需要使用原子操作、线程局部存储或者同步原语。 5. **异常处理**:线程可能会抛出未被捕获的异常,这可能导致线程终止,甚至整个应用程序崩溃。...
在这个头文件中,定义了一个`std::thread`类,它是创建新线程的基础。下面是一个简单的例子,展示了如何创建一个执行特定函数的新线程: ```cpp #include #include void hello() { std::cout , World from ...
`TThread`类是Delphi中线程的基础,它继承自`TComponent`,提供了一个创建和管理线程的基本框架。通过重写`Execute`方法,你可以定义线程的主要执行逻辑。 例如,`thread_managerD7`可能是一个线程管理组件,它可能...
C#跨线程调用窗体控件时可能会引发线程安全问题,例如当多个线程操作同一个控件时,该控件可能会进入不一致的状态,出现争用情况和死锁等问题。因此,确保以线程安全方式访问控件非常重要。 在C#中,控件并不是线程...
在“C# 多线程 进度条示例”中,我们关注的是如何在多线程环境中创建并管理一个进度条,以便用户能够直观地看到后台任务的执行进度。这涉及到以下关键知识点: 1. **线程**: C#中的`System.Threading`命名空间提供...
下面是一个简单的多线程控件安全调用示例: ```csharp using System; using System.Windows.Forms; public class Form1 : Form { private Button button1; private Label label1; public Form1() { button1 ...