关闭

同步代码快:解决多线程安全问题

266人阅读 评论(0) 收藏 举报
分类:

同步代码块:解决多线程安全问题

synchronized(对象)
{
需要同步的代码
}
前提:一个以上线程;多个线程一个锁
好处:解决了安全问题
弊端:消耗资源,慢

 

class Ticket implements Runnable//extends Thread
{
 private static int tick = 100;
 Object obj = new Object();

 public void run()
 {
  while(true)
  {
   synchronized(obj)
   {
    if(tick>0)
    {
     try
     {
      Thread.sleep(20);
     }
     catch
      (Exception e)
     {};
     System.out.println(Thread.currentThread().getName()+"...sale :"+tick--);
    }
   }
  }
 }

}

class  TicketDemo2
{
 public static void main(String[] args)
 {
  
  Ticket t = new Ticket();

  Thread t1 =new Thread(t);
  Thread t2 =new Thread(t);
  Thread t3 =new Thread(t);
  Thread t4 =new Thread(t);

  t1.start();
  t2.start();
  t3.start();
  t4.start();
 }
}

0
0
查看评论

Java多线程安全问题及解决方案

Java多线程安全问题及解决方案 一、问题引入 通过最常见的多窗口售票问题引入线程安全的问题。代码如下: 注:这里使用Runnable接口来实现线程,这样做是为了共享代售票这个资源,如果我们使用继承Thread来操作,需要将代售票ticketCount设置为全局的公共变量才能实现效果。 packag...
  • OONullPointerAlex
  • OONullPointerAlex
  • 2016-03-16 22:17
  • 1534

线程同步:解决线程不安全问题

当多个线程并发访问同一个资源对象时,可能会出现线程不安全的问题,比如现有50个苹果,现在有请三个童鞋(小A,小B,小C)上台表演吃苹果.因为A,B,C三个人可以同时吃苹果,此时使用多线程技术来实现这个案例. class Apple implements Runnable{ private int...
  • caidie_huang
  • caidie_huang
  • 2016-10-07 12:30
  • 1583

从头认识多线程-2.17 同步静态方法和静态代码块

这一章节我们来讨论一些同步静态方法和静态代码块。代码清单package com.ray.deepintothread.ch02.topic_17; /** * * @author RayLee * */ public class SynchClass { public static v...
  • raylee2007
  • raylee2007
  • 2016-05-11 15:20
  • 3302

秒杀多线程第四篇---一个经典的多线程同步问题

上一篇《秒杀多线程第三篇原子操作 Interlocked系列函数》中介绍了原子操作在多进程中的作用,现在来个复杂点的。这个问题涉及到线程的同步和互斥,是一道非常有代表性的多线程同步问题,如果能将这个问题搞清楚,那么对多线程同步也就打下了良好的基础。程序描述:主线程启动10个子线程并将表示子线程序号的...
  • will130
  • will130
  • 2015-11-12 16:29
  • 472

浅谈利用同步机制解决Java中的线程安全问题

这篇博客是我的第一篇博客,介绍了利用同步机制解决Java中的线程安全问题。
  • zhuqianqiandeboke
  • zhuqianqiandeboke
  • 2017-01-28 15:50
  • 284

如何解决线程安全问题

 有2种解决方法。 第一,是采用原子变量,毕竟线程安全问题最根本上是由于全局变量和静态变量引起的,只要保证了对于变量的写操作要么全写要么不写,就可以解决线程安全,定义变量用sig_atomic_t和volatile。 第二,就是实现线程间同步啦,用互斥索,信号量。让线程有序的访问变量就可以...
  • u012437660
  • u012437660
  • 2016-04-18 17:15
  • 1146

java多线程高并发线程安全问题

在抢购之类的业务处理时,会出现超发之类的线程安全问题。 我个人想到的解决方法如下: 采用数据库锁,悲观锁有效率低下问题,所以我推荐乐观锁,虽然会增大CPU开销,很多服务和软件都支持乐观锁,如Redis的watch采用FIFO队列,强行把多线程变成单线程,但是也会出现队列内存爆满问题
  • qq_36823916
  • qq_36823916
  • 2017-06-26 11:40
  • 414

JAVA多线程不安全问题解决方案(多线程并发同一资源)。

引例:吃苹果比赛,3个人同时吃50个苹果,谁先拿到谁就吃,每个哦ing过都有编号。 问题: 多线程同时执行的时候可能出现不安全问题 当3个人同时拿到一个苹果,他们的编号就一样,当时主要看是谁先吃掉苹果 除非拿到苹果和吃掉苹果是连续同步执行,没有其他的线程干扰 方案一: 设置同步代码块(同步锁)。 ...
  • blank__box
  • blank__box
  • 2017-04-24 10:28
  • 1238

玩转Web之servlet(五)---- 怎样解决servlet的线程安全问题

servlet默认是存在线程安全问题的,但是说白了,servlet的线程安全问题实际上就是多线程的线程安全问题,因为servlet恰巧是一个多线程才会出现安全性问题。 浏览器每次通过http协议去提交请求,都会实例化一个servlet对象,即产生一个线程,如果他们操作的是同一个对象,应该把该变量定...
  • u012116457
  • u012116457
  • 2014-04-26 22:57
  • 1301

黑马程序员-多线程(线程的安全问题与锁的理解)

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------   多线程的安全问题 多线程出现安全问题的根源: 多个线程共享同一个资源,并且同时在操作该资源,操作该资源的代码有多句 ...
  • dsa63
  • dsa63
  • 2013-10-30 22:23
  • 820
    个人资料
    • 访问:6541次
    • 积分:170
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:8篇
    • 译文:0篇
    • 评论:0条
    文章分类