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

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

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

/***

* 计数类

* @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类来进行进程的操作

/***

* 线程安全

*

* @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.运行结果如下

ff66d8494e81462ecdaee6af9cbe38e1.png

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

/***

* 计数类

* @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方法内

/***

* 线程安全

*

* @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();

}

}

}

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

ed5669605c297dd6c8b3c52608032c5a.png

本站文章为宝宝巴士)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值