欢迎访问优讯网!
您当前的位置:首页 > 爱编程

Java synchronize线程安全测试

时间:2020-04-15 09:44:35  来源:优讯网  作者:小卡司  浏览次数:
这篇文章主要介绍了Java synchronize线程安全测试,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
 

线程的运行是与当前CPU的资源调度与时间片是有关系的,当一个线程中的执行到某一部分方法的时候轮到另外一个线程来执行相应的代码,所以还没有等到第一个线程执行完那么CPU有切换到另外一个线程来运行其相应的代码,所以这个时候假如操作公共的数据部分就会出现错误

为了解决这个问题,可以使用 synchronized 同步代码块来对公共部分进行同步操作

在用synchronize关键字修饰同步代码块时,运行代码发现不能交替卖票。 以下是初始代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.itheima.Test;
 
public class Test1a {
 
  public static void main(String[] args) {
    Ticket1a t1=new Ticket1a();
    new Thread(t1,"A").start();
    new Thread(t1,"B").start();
    new Thread(t1,"C").start();
     
  }
 
}
class Ticket1a implements Runnable{
   int ticket=100;
  @Override
  public void run() {
    synchronized (Ticket1a.class) {         
    while (true) {
      if (ticket<=0) {
        break;
      }
      try {
        Thread.sleep(20);
      } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
        System.out.println(Thread.currentThread().getName()+" sold  "+(ticket--));
    }
    }
  }
}

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
A sold  100
A sold  99
A sold  98
A sold  97
A sold  96
A sold  95
A sold  94
A sold  93
A sold  92
A sold  91
.
.
.
A sold  10
A sold  9
A sold  8
A sold  7
A sold  6
A sold  5
A sold  4
A sold  3
A sold  2
A sold  1

虽然解决了线程的安全问题,但是不能实现三个窗口交替卖票。后来仔细一看,是synchronize关键字修饰的代码块位置不对,相当于修饰了同步方法。

更改后:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Override
  public void run() {
    while (true) {
        synchronized (Ticket1a.class) {
      if (ticket<=0) {
        break;
      }
      try {
        Thread.sleep(20);
      } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
        System.out.println(Thread.currentThread().getName()+" sold  "+(ticket--));
      }
    }
  }

这样就完成了线程安全的小测试。

以上就是本文的全部内容,希望对大家的学习有所帮助

来顶一下
返回首页
返回首页

原文链接:https://www.jb51.net/article/184691.htm


推荐资讯
如何下载旧版centos iso镜像 如何下载迷你mini版的centos镜像
如何下载旧版centos i
计算机的正确使用姿势 电脑痴如何正确的使用电脑
计算机的正确使用姿势
好用的后台管理的前端框架模版H-ui H-ui框架模版分享
好用的后台管理的前端
微信电脑多开方法 无需辅助电脑版微信双开方法分享
微信电脑多开方法 无
相关文章
栏目更新
栏目热门