[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
比大多数人的努力程度之低,根本轮不到拼天赋...
宝宝巴士 SD.Team
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步