`
wangxinxin1212
  • 浏览: 29373 次
社区版块
存档分类
最新评论

可以获得结果的线程

阅读更多

       在做一个Android应用,该应用需要与服务器通信,需要想服务器发送请求,并处理返回的信息。看起来很好实现,用Android的URL访问服务器地址。但是之前的我一直不知道java1.5以后有了Callable这个东东,而还在为怎么获得执行网络访问返回的数据犯愁。通过FutureTask与Callable可以在需要的时候获得返回值。这样就可以很方便的在执行网络访问后处理返回的数据。

 

关于FutureTask与Callable及java的并发知识还是得继续学习。

 

下面是一个小例子:

public void testTreand(){
		FutureTask<Integer> task = new FutureTask<Integer>(new Callable<Integer>() {//java8中可以使用lambda表达式

			@Override
			public Integer call() throws Exception {//与run方法类似,只是这里有返回值
				int num = 0;
				for(int i=0; i<100; i++){
					num += 1;
					System.out.println(Thread.currentThread().getName()+"->"+ num);
				}
				return num;
			}
		
		});
		Thread thread = new Thread(task,"子线程");
		thread.start();
		for(int i=0; i<100; i++){
			System.out.println(Thread.currentThread().getName()+"->"+i);
		}
		
		try {
			System.out.println("子线程返回结果:"+task.get());
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (ExecutionException e) {
			e.printStackTrace();
		}
	}

 这个例子知识简单的介绍了FutureTask与Callable的使用,网上有更多详细的介绍。

0
1
分享到:
评论

相关推荐

    多线程并行执行,汇总结果

    例如,每个线程可以使用`AtomicInteger`累加计算结果,当所有线程执行完后,主线程可以通过读取`AtomicInteger`的值来获取汇总的结果。或者,使用`ConcurrentHashMap`存储每个线程的局部结果,最后主线程遍历`...

    通过多线程任务处理大批量耗时业务并返回结果

    `CompletionService`通过`Future`接口返回每个任务的结果,使得我们可以在任务完成的瞬间得到结果,而无需等待所有任务执行完毕。这对于处理大批量任务并需要实时处理结果的场景非常有用。 在提供的`ThreadDemo`...

    MFC 工作者线程 线程

    4. **线程同步**:在工作者线程中处理完数据后,可能需要将结果返回给主线程。此时,需要使用同步机制,如`CSemaphore`、`CCriticalSection`或者`CEvent`,以确保数据安全地在两个线程间传递,避免竞态条件。 5. **...

    易语言线程返回数据的方法源码

    计算结果 = 计算任务() // 假设计算任务是一个函数,计算完成后得到结果 设置线程变量( .线程句柄, .计算结果 ) // 将计算结果存入线程变量 结束线程() // 结束当前线程 ``` 在这个例子中,`.线程函数`是线程执行...

    java并发(二十四)多线程结果组装

    通过提交任务给`ExecutorService`,我们可以得到一个`Future`对象,这个对象提供了检查任务是否完成、获取结果或者取消任务的方法。 例如,可以使用`Callable`接口来定义一个返回结果的线程任务,然后用`...

    线程——基本线程的应用和线程调用控件

    - 响应性:UI线程可以快速响应用户操作,而后台线程处理耗时任务,避免程序卡顿。 - 资源共享:线程间可以直接访问同一进程的内存,减少数据交换开销。 3. **线程的创建与管理**: - 在许多编程语言中(如Java、...

    简单多线程程序

    4. **线程优先级**:某些系统允许为线程设置优先级,高优先级的线程可能获得更多的CPU时间。然而,过度依赖优先级可能导致优先级反转和优先级继承问题,因此在实际应用中应谨慎使用。 5. **线程池**:为了避免频繁...

    CSharp多线程简单实例

    `lock`是最常用的一种,用于确保同一时间只有一个线程可以访问特定代码块: ```csharp lock (obj) { // 临界区代码,只有获得锁的线程才能执行 } ``` 3. **后台线程(Background Threads)**: 默认情况下,...

    多线程访问网页测试

    Random类可以生成一系列伪随机数,可以根据需要设定种子值以获得不同的序列。在程序中,可能先创建一个Random实例,然后多次调用其Next()方法生成100个不重复的数字。 多线程访问网页的部分,通常会使用到...

    windows线程

    当线程获得执行权时,它会调用指定的线程函数开始执行。线程函数是线程的入口点,它定义了线程执行的任务。例如,我们可以在线程函数中实现I/O操作、计算任务或其他特定功能。 在多线程环境中,数据同步和互斥是...

    Java多线程的总结

    此外,还可以通过实现Callable接口并使用FutureTask包装来创建可返回结果的线程。 二、线程的生命周期 线程有新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Terminated)五个状态。理解...

    使用多线程模拟火车站售票系统

    1. **互斥量(Mutex)**:互斥量提供了一种独占访问资源的方式,同一时间只有一个线程可以持有互斥量并访问资源。在C++中,我们可以使用`std::mutex`来实现。当一个线程获得互斥锁后,其他尝试获取的线程将被阻塞,...

    delphi多线程传递参数及同步二

    // 使用参数执行任务并得到结果 FResult := Format('处理结果: %d', [FParam1]); // 任务完成后触发事件 FEvent.SetEvent; end; function TMyThread.GetResult: string; begin Result := FResult; end; // ...

    线程锁的用法

    在Windows系统编程中,`CCriticalSection`类是实现线程锁的一种方式,它提供了一种线程同步机制,确保同一时间只有一个线程可以访问特定的代码段或数据。 `CCriticalSection`是Microsoft的Active Template Library ...

    C++线程库介绍

    Future 可以使线程在未来某个时间点获得结果。 7. Threads Threads 是 C++11 的线程库的核心,定义在 `&lt;thread&gt;` 头文件中。Threads 可以使程序跨多个核(心)运行,提高程序的执行效率。 C++11 的线程库提供了一...

    python使用threading获取线程函数返回值的实现方法

    为了解决这个问题,作者创建了一个名为`MyThread`的类,这个类封装了多线程执行和结果收集的功能。 `MyThread`类的构造函数接受一个可选参数`func_list`,这是一个列表,每个元素是一个包含`func`(函数引用)和`...

    FutureTask底层实现分析,有了FutureTask主线程要想获得工作线程(异步计算线程)的结果变得比较简单

    FutureTask 是 Java 中的一种非常重要的多线程设计模式,用于异步计算线程之间的结果传递。在 JDK 中,FutureTask 类是 Future 模式的实现,它实现了 Runnable 接口,作为单独的线程运行。在其 run() 方法中,通过 ...

    易语言线程安全之原子锁与读写锁

    2. 当有线程持有读锁时,其他线程可以继续获取读锁,但不能获取写锁。 3. 当有线程持有写锁时,其他线程既不能获取读锁,也不能获取写锁。 4. 持有锁的线程释放锁后,其他线程按照等待顺序获取锁。 在易语言中,...

    Java多线程文档

    3. 饥饿:线程长时间无法获得所需资源,导致无法执行。 七、线程优先级 Java线程有三个优先级:MIN_PRIORITY(1)、NORM_PRIORITY(5)、MAX_PRIORITY(10),但优先级并不保证执行顺序,只是提供一种调度建议。 ...

    多线程编程(电子书)阅读

    4. **线程安全**:线程安全的代码是指在多线程环境中,无论线程如何调度,都能正确执行并得到预期结果的代码。实现线程安全通常需要使用同步机制。 5. **线程优先级**:某些操作系统支持为线程设置优先级,高优先级...

Global site tag (gtag.js) - Google Analytics