Java线程(一):线程安全与不安全
来源:互联网 发布:遗传算法的交叉概率 编辑:程序博客网 时间:2024/04/28 04:49
作为一个Java web开发人员,很少也不需要去处理线程,因为服务器已经帮我们处理好了,当我们查看JDK API的时候,总会发现一些类说明写着,线程安全或者线程不安全,比如说StringBuilder中,有这么一句,“将StringBuilder
的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用StringBuffer
。 ”,那么下面手动创建一个线程不安全的类,然后在多线程中使用这个类,看看有什么效果。
Count.java:
- public class Count {
- private int num;
- public void count() {
- for(int i = 1; i <= 10; i++) {
- num += i;
- }
- System.out.println(Thread.currentThread().getName() + "-" + num);
- }
- }
ThreadTest.java:
- public class ThreadTest {
- public static void main(String[] args) {
- Runnable runnable = new Runnable() {
- Count count = new Count();
- public void run() {
- count.count();
- }
- };
- for(int i = 0; i < 10; i++) {
- new Thread(runnable).start();
- }
- }
- }
- Thread-0-55
- Thread-1-110
- Thread-2-165
- Thread-4-220
- Thread-5-275
- Thread-6-330
- Thread-3-385
- Thread-7-440
- Thread-8-495
- Thread-9-550
1. 将Count中num变成count方法的局部变量;
- public class Count {
- public void count() {
- int num = 0;
- for(int i = 1; i <= 10; i++) {
- num += i;
- }
- System.out.println(Thread.currentThread().getName() + "-" + num);
- }
- }
- public class ThreadTest4 {
- public static void main(String[] args) {
- Runnable runnable = new Runnable() {
- public void run() {
- Count count = new Count();
- count.count();
- }
- };
- for(int i = 0; i < 10; i++) {
- new Thread(runnable).start();
- }
- }
- }
上述测试,我们发现,存在成员变量的类用于多线程时是不安全的,不安全体现在这个成员变量可能发生非原子性的操作,而变量定义在方法内也就是局部变量是线程安全的。想想在使用struts1时,不推荐创建成员变量,因为action是单例的,如果创建了成员变量,就会存在线程不安全的隐患,而struts2是每一次请求都会创建一个action,就不用考虑线程安全的问题。所以,日常开发中,通常需要考虑成员变量或者说全局变量在多线程环境下,是否会引发一些问题。
本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/7421217
0 0
- Java线程(一):线程安全与不安全
- Java线程(一):线程安全与不安全
- Java线程(一):线程安全与不安全
- Java线程(一):线程安全与不安全
- Java线程(一):线程安全与不安全
- Java线程(一):线程安全与不安全
- Java线程(一):线程安全与不安全
- Java线程(一):线程安全与不安全
- Java线程(一):线程安全与不安全
- Java线程(一):线程安全与不安全
- Java线程(一):线程安全与不安全
- Java线程(一):线程安全与不安全
- Java线程(一):线程安全与不安全
- Java线程(一):线程安全与不安全
- Java线程(一):线程安全与不安全
- Java线程(一):线程安全与不安全
- Java线程(一):线程安全与不安全
- Java线程(一):线程安全与不安全
- 使用友盟实现应用程序弹窗更新
- js发送post请求
- localStorage作为简单数据库来利用
- AutoRun 免疫程序的编写
- ios 隐藏navigationbar 最少代码
- Java线程(一):线程安全与不安全
- [ATL/WTL]_[初级]_[拖放文件到窗口]
- Android开发性能优化
- 实现跨域的N种方法
- IdHTTP.post超时导致整个线程停止问题解决
- Apple免费加急审核流程
- 快速Android开发系列网络篇之Retrofit
- Android IntentService详解
- iOS-CATransiton动画效果