java线程返回值讨论

java线程返回值讨论
在线程当中,返回值是个很大的问题。比如:在线程执行到某一步的时候要将数据返回,在程序执行完成后要返回值。
在java中,线程的返回值可以使用Future<T>来获取,也可以使用其他的手段。以下讨论一些返回值的一些小手段:
1、使用静态变量来进行值的返回
使用静态变量来进行值的返回是最简单的一种,也是不可取的一种,这种不仅带来线程的安全性,同时内存一直不能释放,直到系统退出才能释放内存,因此会造成内存花费很多,但是真正在使用的很少。
2、使用Futuren<T>来获取
这个不用过多的解释,查看java线程
3、使用反向调用
使用反向调用的就是将当前的对象或者是某个类的实例传入到线程当中,当需要调用时就进行调用。如下图:



代码:

//调用的类
package cn.com.theadmain;
public class TestThread {
private String testName;
public void setTestName(String name) {
System.out.println(name);
testName = name;
}
public void testThread() throws InterruptedException {
Thread t = new Thread(new ThreadRunnable(this));
t.start();
t.join();
System.out.println(testName);
}
}

//实现线程执行的代码
package cn.com.theadmain;
public class ThreadRunnable implements Runnable {
private TestThread testThread;
public ThreadRunnable(TestThread testThread) {
// TODO Auto-generated constructor stub
this.testThread = testThread;br/>}
@Override
public void run() {
// TODO Auto-generated method stub
//操作
testThread.setTestName(this.toString());
//操作
}
}

在上面的代码中,如果成员变量只是提供一个线程进行修改,其他线程只是读取的话,那么没有必要考虑线程安全的问题,如果是多个线程都要对变量进行修改的话,那么需要考虑到线程安全的问题了。解决线程安全的问题则有两个方法:
1、在成员变量的前面,在private等的后面添加volatile,就可以解决该变量只有一个线程进行访问了。
2、在调用的方法上面添加synchronized修饰关键字,保证只有一个变量访问这个方法
3、在调用的方法中,在关键的代码段添加synchronized(成员变量) 就可以保证关键的代码只有一个线程进行访问了。
4、使用原子类型的变量,比如AtomicInteger,AtomicIntegerArray,使用线程安全的容器,比如ConcurrentHashMap,ConcurrentLinkedQueue, 等。其余的操作在线程结束时操作。

java线程返回值讨论

原文地址:http://blog.51cto.com/xiaoshunzi/2349321

时间: 2024-08-27 15:38:14

java线程返回值讨论的相关文章

java 线程返回值,优先级,后台线程 示例代码

ava 线程返回值,休眠,优先级,后台线程  示例代码 package org.rui.thread.basic; import java.util.ArrayList; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Execu

Java多线程和并发(四),线程返回值获取方式和Callable接口

目录 1.主线程等待法 2.使用Thread类的join()阻塞当前线程,等待子线程执行完毕 3.通过Callable接口实现:通过FutureTask Or线程池获取 四.线程返回值获取方式和Callable接口 1.主线程等待法 public class CycleWait implements Runnable{ private String value; @Override public void run() { try { Thread.currentThread().sleep(50

Android平台调用Web Service:线程返回值

接上文 前文中的遗留问题 对于Java多线程的理解,我以前仅仅局限于实现Runnable接口或者继承Thread类,然后重写run()方法,最后start()调用就算完事,但是一旦涉及死锁以及对共享资源的访问和随时监控线程的状态和执行顺序和线程返回值等就不行了. Callable 和 Future 简介 Callable接口代表一段可以调用并返回结果的代码;Future接口表示是执行异步任务时的状态.返回值等信息.所以说Callable用于产生结果,Future用于获取结果. 1. Callab

Java中有返回值的线程,(缓存)线程池的初步使用

一 简介 在JDK1.5以前的线程是没有返回值的(Thread,Runnable),Callable这个接口是之后才出现的新特性,用法跟Runnable类似,只是不同的是可以有返回值.因此为了测试Callable这个类以及线程池相关内容,我将上一篇文章中的代码进行了小幅度的修改然后写了一下 二 关于线程池的简单使用步骤 1 定义线程类,(1)extends Thread (2)implements Runnable (3)implements Callable<> 2 建立ExecutorSe

http协议版本和java返回值讨论

先来看看http协议1.0和1.1的区别: 1.0:HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求: 1.1:HTTP 1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟. 再看看java里面return的作用: return语句主要有两个用途:一方面用来表示一个方法返回的值(假定没有void返回值),另一方面是

【多线程】让线程返回值

很多时候,我们使用线程去处理一些业务,并希望得到结果,这时候,我们可以使用Callable. 下面例子,模拟使用线程查询DB得到一个List. 例子 线程,返回一个List数据 package com.nicchagil.study.thread.cnblogs.No02可返回值的线程; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import

Callable 获取线程返回值

allable与 Future 两功能是Java在后续版本中为了适应多并法才加入的,Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其他线程执行的任务. Callable的接口定义如下: public interface Callable<V> { V   call()   throws Exception; } Callable和Runnable的区别如下: I    Callable定义的方法是call,而Runnable定义的

2.Perl 多线程:Threads(线程返回值)

1 use warnings; 2 use strict; 3 use threads; 4 5 sub TEST{ 6 print "Hello, World!\n"; 7 return (qw/1 2 3 4 'a'/); 8 } 9 10 #返回列表方法1 11 my ($t1) = threads->new('TEST'); 12 print $t1->join, "\n"; 13 14 #返回列表方法2 15 # 16 my $t2 = thr

java中返回值和参数理解

1.什么是对象,为什么需要对象? 对象是类的一个实例(对象不是找个女朋友),有状态和行为.万物皆对象! 2.什么是函数,为什么需要函数? 习惯把函数也叫成方法,都是一个意思:函数是具备特定功能的一段代码块,解决了重复性代码的问题.目的是为了提高程序的复用性和可读性. 3.什么是函数的返回值,什么是函数的参数? 函数返回值就是你所调用的函数返回给你的值.形参:用来接收调用该方法时传递的参数.只有在被调用的时候才分配内存空间,一旦调用结束,就释放内存空间.因此仅仅在方法内有效.实参:传递给被调用方法