W e S D
0 1

[JavaWeb基础] 022.线程安全(一)

在我们做客户端程序的时候我们经常会碰到线程安全的问题,比较经典的例子就是模拟局域网聊天。那么线程的安全到底是怎么回事呢,我们经常会听到StringBuffer是线程安全的,StringBuilder不是线程安全的,下面我们来讲讲线程安全的重要性

1.首先我们来看一个例子,首先是一个Count类,这里面只有一个计数功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/***
 * 计数类
 * @author yangqingshan
 *
 */
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);
    }
}

 2.然后我们需要有一个Thread类来进行进程的操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  /***
 * 线程安全
 *
 * @author yangqingshan
 *
 */
public class ThreadSafe {
    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            // 声明计数器类
            Count count = new Count();
            // 执行线程方法
            public void run() {
              count.count();
            }
        };
        // 同时启动10个线程
        for (int i = 0; i < 10; i++) {
            new Thread(runnable).start();
        }
    }
}

3.运行结果如下

4.2种方法解决这个问题。第一:Count类中的属性num放到count方法中声明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/***
 * 计数类
 * @author yangqingshan
 *
 */
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);
    }
}

 5.第二种方法:修改线程类中的Count的生命在run方法内

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/***
 * 线程安全
 *
 * @author yangqingshan
 *
 */
public class ThreadSafe {
    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            // 执行线程方法
            public void run() {
                // 声明计数器类
                Count count = new Count();
                count.count();
            }
        };
        // 同时启动10个线程
        for (int i = 0; i < 10; i++) {
            new Thread(runnable).start();
        }
    }
}

 通过以上的例子,我们可以对线程安全有个初步的认识

 

 

 

本站文章为 宝宝巴士 SD.Team 原创,转载务必在明显处注明:(作者官方网站: 宝宝巴士 

转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4871893.html

posted @   SD.Team  阅读(504)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示