• 学习java第21天


    1.多线程同步

    class SyncCounter1
    {
     public static void main(String[] args){
      Num num = new Num();
      Thread counter1 = new Counter(num);
      Thread counter2 = new Counter(num);
      for( int i=0; i<10; i++ ){
       if(!num.testEquals()) break;
       try{                 
        Thread.sleep(100);
       }catch(InterruptedException e){
       }
      }
     }
    }
    class Num
    {
     private int x=0;
     private int y=0;
     void increase(){
      x++;
      y++;
     }
     boolean testEquals(){
      boolean ok = (x==y);
      System.out.println( x + "," + y +" :" + ok);
      return ok;
     }
    }
    class Counter extends Thread
    {
     private Num num;
     Counter( Num num ){
      this.num = num;
      this.setDaemon(true);
      this.setPriority(MIN_PRIORITY);
      this.start();
     }
     public void run(){
      while(true){
       num.increase();
      }
     }
    }
    2.同步
    java有互斥锁,保证共享数据操作的完整性
    关键字  synchronized  用来与对象的互斥锁联系
    *synchronized用法
    synchronized(对象){ ... }
    synchronized(this)
    class SyncCounter2
    {
     public static void main(String[] args){
      Num num = new Num();
      Thread counter1 = new Counter(num);
      Thread counter2 = new Counter(num);
      for( int i=0; i<10; i++ ){
       num.testEquals();
       try{                 
        Thread.sleep(100);
       }catch(InterruptedException e){
       }
      }
     }
    }
    class Num
    {
     private int x=0;
     private int y=0;
     synchronized void increase(){
      x++;
      y++;
     }
     synchronized boolean testEquals(){
      boolean ok = (x==y);
      System.out.println( x + "," + y +" :" + ok);
      return ok;
     }
    }
    class Counter extends Thread
    {
     private Num num;
     Counter( Num num ){
      this.num = num;
      this.setDaemon(true);
      this.setPriority(MIN_PRIORITY);
      this.start();
     }
     public void run(){
      while(true){
       num.increase();
      }
     }
    }
    3.线程的死锁
    class Worker
    {
     int id;
     public Worker(int id){ this.id=id; }
     synchronized void doTaskWithCooperator(Worker other){
      try{ Thread.sleep(500); } catch(Exception e){}
      synchronized(other){
       System.out.println("doing" + id);
      }
     }
    }
    class DeadLockDemo{
     public static void main(String[] args) {
      Worker w1 = new Worker(1);
      Worker w2 = new Worker(2);
            Thread td1 = new Thread(()->{
       w1.doTaskWithCooperator(w2);
      });
            Thread td2 = new Thread(()->{
       w2.doTaskWithCooperator(w1);
      });
      td1.start();
      td2.start();
        }
    }
     
     
    今天遇到的困难:对经典题型  “生产者-消费者问题”的不解
     
    明天要学习的内容:流式操作和并行流
  • 相关阅读:
    第五周学习进度报告
    第四周学习进度报告
    第三周大数据学习进度
    十六周总结
    程序员修炼之道-从小工到专家阅读笔记03
    第二阶段冲刺10
    利用正则表达式,分割地址至省市县,更新MySQL数据库数据
    阅读笔记--《大型网站技术架构》—01大型网站概述
    第三周周总结——kettle的简单使用以及MYSQL数据库去重
    热词分析中运用可用性战术
  • 原文地址:https://www.cnblogs.com/SirNie/p/13380871.html
Copyright © 2020-2023  润新知