首页 > 其他分享 >同步方法解决线程安全问题

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

时间:2022-10-23 00:44:05浏览次数:61  
标签:同步 Thread Window3 t2 chepiao 安全 线程 new

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

实现接口的同步方法实例

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();
  }
}
 

标签:同步,Thread,Window3,t2,chepiao,安全,线程,new
From: https://www.cnblogs.com/zhazhawei906/p/16817718.html

相关文章

  • 郁金香 -多线程创建
    #include<stdio.h>#include<Windows.h>//创建线程函数//开辟线程//BUG解决让这两个线程可以长期存在免得无法观察DWORDWINAPI线程函数1(LPVOIDarg){whil......
  • 安卓中实现异步任务(4)——使用线程池实现
    安卓中实现异步任务(4)——使用线程池实现问题背景上篇文章大致介绍了几种安卓汇总实现异步任务的方法,讲得比较简要,有朋友问到具体的实现方式,现在开始分列几篇文章详细介绍......
  • 线程与进程的区别
    进程是资源分配的最小单位,线程是程序执行的最小单位。进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操......
  • 线程的状态
    线程的状态从操作系统层面看有5种,从javaapi的层面看有6种一、线程状态5种:从操作系统层面看从操作系统的角度看,线程的状态有5种:初始状态,可运行状态,运行状态,阻塞状态,......
  • 浅谈Java实现线程同步&互斥
    先说简单的,Java实现线程互斥:无线程互斥的情况:/***@desc:没有进行互斥的情况*@author:YanMingXin*@create:2021/12/19-18:02**/publicclassMethod0{......
  • 单例 Bean 的线程安全问题
    最近面试遇到一个问题:单例Bean的线程安全问题怎么解决的。之前了解但是没有深究它的解决方法。大部分时候我们并没有在项目中使用多线程,所以很少有人会关注这个问题。......
  • 使用同步代码块解决线程安全问题
    使用同步代码块解决线程安全问题packageA_ShangGuiGu.Thread.ThreadDemo;​/***例子:三个窗口买票,使用实现Runnable接口的方法。*1.出现的问题:卖票过程中出现了重票,错......
  • 进程与线程的区别
     线程与进程的根本区别是进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。  在引入了线程的操作系统中,通常一个进程都有若干个线程,至少包......
  • devexpress中grid控件教程 多线程异步加载数据,进度条展示
    devexpress中最强大的控件,要数它的Grid了。几乎任务数据都可以展示,但今天要用它做另一个功能。假设我们开发这样一款软件:视频编辑软件。里面有个功能,提取视频中的音频。一......
  • 15-安全加密
    对称加密加密和解密使用同一个密钥常见对称加密算法:DES:DataEncryptionStandard,56bits3DES:AES:Advanced(128,192,256bits)Blowfish,TwofishIDEA,RC6,CAST5非对称加密密钥是......