标签:成员 退出 内存 ges integer interrupt 对象 ado text
java线程返回值讨论
代码:
//调用的类
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, 等。其余的操作在线程结束时操作。
标签:成员 退出 内存 ges integer interrupt 对象 ado text
原文地址:http://blog.51cto.com/xiaoshunzi/2349321