使用同步方法解决线程安全问题

实现接口的同步方法实例

package A_ShangGuiGu.Thread.ThreadDemo;

/**
* 使用同步方法解决Runnable接口的线程安全问题。
* 将需要对代码进行的操作全部放入一个方法中,在方法名前使用synchronized字段来将该方法定义为同步方法。
* 同步方法的总结:
* 1.同步方法依然涉及到同步监视器,只是同步监视器不需要显示的声明
* 2.非静态的同步方法,它的同步监视器:this:(当前对象)
*   静态同步方法的同步监视器是当前类本身。name.class
*/

class MaiPiao2 implements Runnable{
   private int chepiao = 100;
   Object obj = new Object();
   @Override
   public void run() {
       while (true) {
              show();
              if (chepiao==0){
                  break;
              }
      }

  }
   private synchronized void show (){
       if (chepiao > 0) {
           try {
               Thread.sleep(1);
          } catch (InterruptedException e) {
               throw new RuntimeException(e);
          }
           System.out.println(Thread.currentThread().getName() + ":" + chepiao);
           chepiao--;
      }
  }
}
public class ThreadWindowTest2 {
   public static void main(String[] args) {
       MaiPiao2 maiPiao2 = new MaiPiao2();
       Thread t1 = new Thread(maiPiao2);
       Thread t2 = new Thread(maiPiao2);
       Thread t3 = new Thread(maiPiao2);

       t1.setName("窗口1");
       t2.setName("窗口2");
       t3.setName("窗口3");

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

继承的线程的同步方法使用实例

package A_ShangGuiGu.Thread.ThreadDemo;

class Window3 extends Thread{
   private static int chepiao = 100;

   @Override
   public void run() {
       while(true){
           show();
           if (chepiao==0){
               break;
          }
      }
  }
   private static synchronized void show (){
       if (chepiao > 0) {
           try {
               Thread.sleep(10);
          } catch (InterruptedException e) {
               throw new RuntimeException(e);
          }
           System.out.println(Thread.currentThread().getName() + ":" + chepiao);
           chepiao--;
      }
  }
}
public class ThreadWindowTest3 {
   public static void main(String[] args) {

       Window3 t1 = new Window3();
       Window3 t2 = new Window3();
       Window3 t3 = new Window3();

       t1.setName("窗口1");
       t2.setName("窗口2");
       t3.setName("窗口3");

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

原文地址:http://www.cnblogs.com/zhazhawei906/p/16817718.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性