当前位置:首页 > 全部子站 > IT > 思科认证

Java基础:关于线程安全

来源:长理培训发布时间:2017-12-13 14:15:20

 线程安全的本质体现在两个方面,

  A变量安全:多线程同时运行一段代码

  B线程同步:一个线程还没执行完,另一个线程又进来接着执行。

  看个简单的例子。

  Java代码

  public class ThreadSafe implements java.lang.Runnable {

  int num = 1;

  public void run() {

  for (int i = 0; i < 3; i++) {

  num = num + 1;

  try {

  Thread.sleep(2000);

  } catch (InterruptedException e) {

  e.printStackTrace();

  }

  System.out.println("num is value +==="+Thread.currentThread().getName()+"---------" + num);

  }

  }

  }

  TestMan.java 写道

  package com.java.thread.test;

  public class TestMan {

  public static void main(String[] args) {

  Runnable safe=new ThreadSafe();

  Thread thread1=new Thread(safe,"thread1");

  Thread thread2=new Thread(safe,"thread2");

  thread1.start();

  thread2.start();

  }

  }

  运行结果

  num is value +===thread2---------3

  num is value +===thread1---------4

  num is value +===thread2---------5

  num is value +===thread1---------6

  num is value +===thread1---------7

  num is value +===thread2---------7

  很明显是错误的,应为两个线程共享同一个变量。这里就是变量的安全问题。

  解决办法

  1抛弃单实例,多线程的方式,用多实例,多线程的方式,这样就和单线程是一个样了,不会出错,但是是最接近传统的编程模式

  2不要用类的实例变量,经可能把变量封装到方法内部。

  1类的解决办法的代码。

  Java代码

  public class TestMan {

  public static void main(String[] args) {

  Runnable safe=new ThreadSafe();

  Runnable safe2=new ThreadSafe();

  Thread thread1=new Thread(safe,"thread1");

  Thread thread2=new Thread(safe2,"thread2");

  thread1.start();

  thread2.start();

  }

  }

  运行结果

  num is value +===thread1---------2

  num is value +===thread2---------2

  num is value +===thread1---------3

  num is value +===thread2---------3

  num is value +===thread1---------4

  num is value +===thread2---------4

责编:罗莉

发表评论(共0条评论)
请自觉遵守互联网相关政策法规,评论内容只代表网友观点,发表审核后显示!

国家电网校园招聘考试直播课程通关班

  • 讲师:刘萍萍 / 谢楠
  • 课时:160h
  • 价格 4580

特色双名师解密新课程高频考点,送国家电网教材讲义,助力一次通关

配套通关班送国网在线题库一套

课程专业名称
讲师
课时
查看课程

国家电网招聘考试录播视频课程

  • 讲师:崔莹莹 / 刘萍萍
  • 课时:180h
  • 价格 3580

特色解密新课程高频考点,免费学习,助力一次通关

配套全套国网视频课程免费学习

课程专业名称
讲师
课时
查看课程
在线题库
面授课程更多>>
图书商城更多>>
在线报名
  • 报考专业:
    *(必填)
  • 姓名:
    *(必填)
  • 手机号码:
    *(必填)
返回顶部