S1L*_*IOR 10 java multithreading threadpool
我已经在java中学习了很多关于线程的教程,但我找不到答案.
我的问题是:如何同时运行两个独立的线程?
我的情况是:我有两个任务;
由于这两个任务是独立的,我想同时执行它们.
我尝试使用具有两个线程的线程池,但问题是数据库任务很快完成,但发送推送通知需要一些时间.
因此,当一个任务完成而另一个任务仍处于未决状态时,它会抛出异常.
我的代码也没有问题,因为它运行正常而不使用线程.
提前致谢
Mad*_*mer 33
new Thread(new Runnable() {
public void run() {
System.out.println("Look ma, no hands");
}
}).start();
new Thread(new Runnable() {
public void run() {
System.out.println("Look at me, look at me...");
}
}).start();
Run Code Online (Sandbox Code Playgroud)
工作得很好......
我更喜欢亲自使用ExecutorService.
使用ExecutorService示例更新
所以我写了这个非常快的例子......
基本上它使用一个ExecutorService来运行几个简单的任务.目前,这两项任务将相互并行(同时)
public static void main(String[] args) throws InterruptedException {
ExecutorService service = Executors.newFixedThreadPool(2);
service.submit(new PathScanner());
service.submit(new Counter());
service.shutdown();
service.awaitTermination(1, TimeUnit.DAYS);
System.exit(0);
}
public static class PathScanner implements Callable<Object> {
@Override
public Object call() throws Exception {
scan(new File("C:/"), 0);
return null;
}
protected void scan(File path, int deepth) {
if (deepth < 15) {
System.out.println("Scanning " + path + " at a deepth of " + deepth);
File[] files = path.listFiles();
for (File file : files) {
if (file.isDirectory()) {
scan(file, ++deepth);
}
}
}
}
}
public static class Counter implements Callable<Object> {
@Override
public Object call() throws Exception {
for (int index = 0; index < 1000; index++) {
Thread.sleep(1);
System.out.println(index);
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
运行...
现在ExecutorService service = Executors.newFixedThreadPool(2);改为ExecutorService service = Executors.newFixedThreadPool(1);并再次运行它.你看到了区别吗?
这是控制执行程序在处理队列时可以使用的同时线程数的方法.
补充更多任务并将其添加到队列中,看看你得到了什么.