zoukankan      html  css  js  c++  java
  • 线程同步初解---转载

    //线程安全问题的原因其实就是:线程执行多条语句的时候出现了阻塞,然后没有执行完该线程另一线程就启动了。
    //解决方法就是同步代码块:synchronized(对象)
    //synchronized(对象)
    //{
    //  需要同步的代码
    //}
    class Ticket implements Runnable
    {
    private int ticket = 100;
    Object obj = new Object();
    public void run()
    {
    while(true)
    {
    synchronized(obj)//这里注意使用同步的前提是两个线程以上才可以,而且必须保证是多个线程使用一个“锁”。
    //同时注意不要把run()方法全部放到synchronized中,因为这样做就成了单线程.有些代码不需要放在synchronized中,只把需要的放进去就可以
    {
    if(ticket>0)
    {
    try{Thread.sleep(10);}catch(Exception e){}//此处尝试阻塞睡眠一下就会发现有了负值的“票”,
    //这也就是说内存里面线程值进行了公有的利用(因为接口类创建了一个,所以共享该数据),所以这里我们需要用到线程安全问题的线程同步synchronized
    System.out.println(Thread.currentThread().getName()+"当前票"+ticket--);
    }
    }
    }
    }
    }

    class ThreadSecure
    {
    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();
    }
    }
  • 相关阅读:
    LDD3 第7章 Time,Delays and Deferred Work
    4412 gpio读取pwm
    LDD快速参考
    4412 4路pwm输出
    PCB六层板学习(一)
    STM32 TIM3 PWM输出 4路
    4412 学习目录总结
    4412 Linux定时器
    4412 SPI驱动
    4412 i2c驱动
  • 原文地址:https://www.cnblogs.com/kevinfuture/p/4282004.html
Copyright © 2011-2022 走看看