电话:0731-83595998
导航

Java基础:关于线程安全

来源: 2017-12-13 14:15

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

  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

编辑推荐:

下载Word文档

温馨提示:因考试政策、内容不断变化与调整,长理培训网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准! (责任编辑:长理培训)

网络课程 新人注册送三重礼

已有 22658 名学员学习以下课程通过考试

网友评论(共0条评论)

请自觉遵守互联网相关政策法规,评论内容只代表网友观点!

最新评论

点击加载更多评论>>

精品课程

更多
10781人学习

免费试听更多

相关推荐
图书更多+
  • 电网书籍
  • 财会书籍
  • 其它工学书籍
拼团课程更多+
  • 电气拼团课程
  • 财会拼团课程
  • 其它工学拼团
热门排行

长理培训客户端 资讯,试题,视频一手掌握

去 App Store 免费下载 iOS 客户端