Ⅰ java 同一个异步任务内的异步任务能不能并发
是三个线程同时运行还是依次运行,从你给的代码看不出来,要看excute()方法里线程类用的是哪个方法,如果是用.start()方法就是同时运行,如果用run()方法则依次运行。
不过用start()方法,那三个线程就和主线程是并行运行,可能产生你的Load1Async Load2Async Load3Async 没有运行完就去运行LoadPicAsync()了。如果LoadPicAsync()离需要用到Load1Async返回的对象,就一定要等Load1Async Load2Async Load3Async是否都运行完了,再运行LoadPicAsync()。
Ⅱ Java 怎么在Main函数中,执行完异步任务后才退出主
要实现这个情况,必须知道以下几点 1、java中线程的结束是由run方法运行完成后自动结束的 2、在main线程(主线程)中,需要得到所有线程的引用。 3、知道jdk提供的CountDownLatch的用法 例子如下: public static void main(String[] args) throwsJava 怎么在Main函数中,执行完异步任务后才退出主
Ⅲ java异步方法什么意思
在JAVA平台,实现异步调用的角色有如下三个角色:调用者,取货凭证,真实数据
异步调用就是:一个调用者在调用耗时操作,不能立即返回数据时,先返回一个取货凭证.然后在过一断时间后凭取货凭证来获取真正的数据.
如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率
只有一个马桶
很多人上厕所
要排队
这叫同步迅雷一次可以下载很多东西
这叫异步
Ⅳ java队列实现异步执行
在整个思路上要调整一下
1、会有很多线程给一个队列上添加任务
2、有一个或者多个线程逐个执行队列的任务
考虑一下几点:
1、没有任务时,队列执行线程处于等待状态
2、添加任务时,激活队列执行线程,全部run起来,首先抢到任务的执行,其他全部wait
给个小例子吧
packageorg;
importjava.util.LinkedList;
importjava.util.List;
publicclassQueues{
publicstaticList<Task>queue=newLinkedList<Task>();
/**
*假如参数o为任务
*@paramo
*/
publicstaticvoidadd(Taskt){
synchronized(Queues.queue){
Queues.queue.add(t);//添加任务
Queues.queue.notifyAll();//激活该队列对应的执行线程,全部Run起来
}
}
staticclassTask{
publicvoidtest(){
System.out.println("我被执行了");
}
}
}
packageorg;
importjava.util.List;
{
@Override
publicvoidrun(){
while(true){
synchronized(Queues.queue){
while(Queues.queue.isEmpty()){//
try{
Queues.queue.wait();//队列为空时,使线程处于等待状态
}catch(InterruptedExceptione){
e.printStackTrace();
}
System.out.println("wait...");
}
Queues.Taskt=Queues.queue.remove(0);//得到第一个
t.test();//执行该任务
System.out.println("end");
}
}
}
publicstaticvoidmain(String[]args){
Exece=newExec();
for(inti=0;i<2;i++){
newThread(e).start();//开始执行时,队列为空,处于等待状态
}
//上面开启两个线程执行队列中的任务,那就是先到先得了
//添加一个任务测试
Queues.Taskt=newQueues.Task();
Queues.add(t);//执行该方法,激活所有对应队列,那两个线程就会开始执行啦
}
}
上面的就是很简单的例子了
Ⅳ java如何实现线程异步
Thread t=new Thread(){
public void run(){
//保存信息操作
}
}
t.start();
//同时做别的事情.
Ⅵ java中异步处理和同步处理分别是什么意思
举个例子:A和B一起从某点出发到终点。
同步就是只能A走完某一段然后停下,让B开始走一段再停下,再让A走。如此往复。简单理解就是,必须是一段程序执行完后才能执行后面的程序。
异步就是,同一时间可能A和B同时都在往终点赶,此时不存在先后顺序,就是说,两个程序可以同时执行,称为异步。
Ⅶ 如何用JAVA实现异步信息处理
一个进程专门循环这个list处理这个消息。是进程还是线程?进程间共享数据,你的list不是直接就能访问的,所以估计LZ说的是线程
如果LZ想省点工作,可以用BlockingQueue来代替你的list,这样线程等待和唤醒不用你自己写代码实现了,如果非要用list,那么就自己做好同步
list的小例子,LZ自己参考发挥吧
class MessageConsumer extends Thead {
private List<YourMessageType> list;
private boolean running = true;
public MessageConsumer(List<YourMessageType> list) {this.list = list;}
public void run() {
while (running) {
YourMessageType msg = null;
try {
synchronized(list) {
while (list.size() == 0) {
list.wait();
}
msg = list.remove(0);
list.notiryAll();
}
} catch (Exception e) {
e.printStackTrace();
}
if (msg == null) continue;
//System.out.println(msg); //print message
}
}
}
//调用sample
class ShareMole {
List<YourMessageType> list = new ArrayList<YourMessageType>();
...
}
public class Main {
public static void main(String[] args) {
ShareMule sm; //so on
...
Thread t = new MessageConsumer(sm.list);
t.start();
...
}
}
Ⅷ java 线程池异步任务需要处理异步结果会阻塞吗
1、关于异步:java中异步请求就是*调用*在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在*调用*发出后,*被调用者*通过状态、通知来通知调用者,或通过回调函数处理