新启一个线程,获取不到原线程的信息,需要在新启之前将一个值作为参数传进去
前端不存在所谓线程,你要在异步方法中传参就要搞一个变量去存放参数
实现 FileAlterationListenerAdaptor类,然后会继承一些方法,然后使用FileAlterationObserver的addlistener方法添加进去这个就好
如下代码:
_ob.addListener(new FileAlterationListenerAdaptor(){
@Override
public void onStart(FileAlterationObserver observer) {
log.debug("{} 已开启监控文件夹:{}",_name,path);
}
@Override
public void onDirectoryCreate(File directory) {
logger.info("有新文件夹生成:{}",directory.getName());
}
@Override
public void onDirectoryChange(File directory) {
logger.info("有文件夹内容发生变化:{}",directory.getName());
}
@Override
public void onDirectoryDelete(File directory) {
logger.info("有文件夹被删除:{}",directory.getName());
}
@Override
public void onFileCreate(File file){
logger.info("有新增文件:{}",file.getName());
}
@Override
public void onFileChange(File file){
logger.info("有文件被修改:{}",file.getName());
}
@Override
public void onFileDelete(File file){
logger.info("有文件被删除:{}",file.getName());
}
@Override
public void onStop(FileAlterationObserver observer){
log.debug("{}:已停止监控文件夹:{}",_name,path);
}
});
问题解答:
要在Java中启动一个新的线程以进行异步处理,可以使用线程池或者执行器来实现。启动新线程之前传递参数的方法有多种,可以使用构造函数传递参数、使用静态变量来共享数据等。
假设需要启动一个新线程处理两个整数相加并返回结果,需要在启动新线程之前将这两个整数作为参数传递进去,可以使用以下代码实现:
class AddTask implements Callable<Integer> {
private int a, b;
public AddTask(int a, int b) {
this.a = a;
this.b = b;
}
public Integer call() {
return a + b;
}
}
public class Main {
public static void main(String[] args) throws Exception {
int a = 1, b = 2;
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<Integer> future = executor.submit(new AddTask(a, b));
int result = future.get();
System.out.println(result);
executor.shutdown();
}
}
在这个程序中,通过创建一个实现Callable接口的AddTask类来实现异步处理。该类的构造函数接收两个整数,作为待相加的数。该类实现了Callable接口中的call方法,用来执行相加操作并返回结果。在程序的主函数中,创建了一个ExecutorService对象,使用submit方法向线程池中添加AddTask对象来异步执行相加操作,并返回一个Future对象future。调用future.get()方法可以等待异步操作完成,并获取异步操作的结果。
参考文献:
[1] Java线程池的使用
[2] Java ExecutorService的使用
[3] Java中使用Executor实现多线程
[4] Java中的Callable类型
[5] Java中的Future类型