在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

Java中的多线程

2017-2-7 13:39| 发布者: zhangjf| 查看: 572| 评论: 0

摘要: 经常听到StringBuffer是线程安全的,String是线程不安全的,可是什么是线程安全呢,什么是线程不安全呢,这些困扰了我们这么久 ,在高并发情况下,我们要注意线程安全,全局变量一般都是线程不安全,而局部变量一般都是安全 ...

经常听到StringBuffer是线程安全的,String是线程不安全的,可是什么是线程安全呢,什么是线程不安全呢,这些困扰了我们这么久

,在高并发情况下,我们要注意线程安全,全局变量一般都是线程不安全,而局部变量一般都是安全的看代码

  1. package org.thread;
  2. public class Count {
  3. private int num =0;
  4. public void getCount() {
  5. for (int i = 0; i <= 100; i++) {
  6. num += i;
  7. }
  8. System.out.println(Thread.currentThread().getName() + "============"
  9. + num);
  10. }
  11. }
复制代码

这个方法是一个计数的方法,我希望他每次返回都是5050

  1. package org.thread;
  2. public class ThreadTest {
  3. public static void main(String[] args) {
  4. Runnable runnable = new Runnable() {
  5. Count count = new Count();
  6. @Override
  7. public void run() {
  8. count.getCount();
  9. }
  10. };
  11. for(int i = 0;i<=100;i++){
  12. new Thread(runnable).start();
  13. }
  14. }
  15. }
复制代码

这个是线程的测试类,线程启动我希望他每次拿到都是5050

看结果

  1. Thread-0============5050
  2. Thread-2============10100
  3. Thread-4============19336
  4. Thread-9============39536
  5. Thread-8============44586
  6. Thread-6============49636
  7. Thread-11============59736
  8. Thread-3============24386
  9. Thread-1============19336
  10. Thread-15============64786
  11. Thread-7============29436
  12. Thread-12============54686
  13. Thread-5============34486
复制代码

  1. Thread-0============5050这个
  2. 这有这个是我想要的,其他数据都是多余的
复制代码

那么现在我想得到5050 有几种方式

第一种

  1. public class Count {
  2. public void getCount() {
  3. int num =0;
  4. for (int i = 0; i <= 100; i++) {
  5. num += i;
  6. }
  7. System.out.println(Thread.currentThread().getName() + "============"
  8. + num);
  9. }
  10. }
复制代码

  1. private int num =0;设置成内部变量也就是在getCount方法中
复制代码

得到的结果

  1. Thread-0============5050
  2. Thread-1============5050
  3. Thread-6============5050
  4. Thread-2============5050
  5. Thread-3============5050
  6. Thread-10============5050
  7. Thread-8============5050
  8. Thread-7============5050
  9. Thread-5============5050
  10. Thread-4============5050
  11. Thread-9============5050
复制代码

这个是我想要的

还有一种就是

  1. Runnable runnable = new Runnable() {
  2. @Override
  3. public void run() {
  4. Count count = new Count();
  5. count.getCount();
  6. }
  7. };
复制代码

  1. Count count = new Count();放到run方法中,每次都创建
复制代码

这种方法消耗内存性能,不提倡

得到的结果

  1. Thread-0============5050
  2. Thread-1============5050
  3. Thread-6============5050
  4. Thread-2============5050
  5. Thread-3============5050
  6. Thread-10============5050
  7. Thread-8============5050
  8. Thread-7============5050
  9. Thread-5============5050
  10. Thread-4============5050
  11. Thread-9============5050
复制代码


来自: http://my.oschina.net/heinrichchen/blog/604211

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-7-9 02:10

Copyright 2015-2025 djqfx

返回顶部