zoukankan      html  css  js  c++  java
  • 多线程学习

     1 package com.service.cone;
     2 
     3 public class EnergySystem {
     4 
     5     //总能量
     6     private final double[] energyBoxs;
     7     
     8      private final Object obj = new Object();
     9     
    10     //个数和每个能量块的能量值
    11     public EnergySystem(int n,double initialEnergy ) {
    12         energyBoxs = new double[n];
    13         for (int i = 0; i < energyBoxs.length; i++) {
    14             energyBoxs[i] = initialEnergy;
    15         }
    16     }
    17 
    18     //能量转移
    19     public void transfer(int from,int to,double amount) {
    20         
    21         synchronized (obj) {
    22             
    23 //            if(energyBoxs[from]<amount){
    24 //                return;
    25 //            }
    26             
    27             while(energyBoxs[from]<amount){
    28                 try {
    29                     //
    30                     obj.wait();
    31                 } catch (InterruptedException e) {
    32                     e.printStackTrace();
    33                 }
    34             }
    35             
    36             System.out.print(Thread.currentThread().getName());
    37             energyBoxs[from]-=amount;
    38             System.out.printf("从%d转移 %10.2f单位能量到 %d",from,amount,to);
    39             energyBoxs[to]+=amount;
    40             System.out.printf("能量总和:%10.2f%n",getTotalEnergies());
    41             //
    42             obj.notifyAll();
    43         }
    44     }
    45 
    46     //返回总能量
    47     public double getTotalEnergies() {
    48         double sum = 0;
    49         for (double amount :energyBoxs) {
    50             sum+=amount;
    51         }
    52         return sum;
    53     }
    54     
    55     //返回长度
    56     public int getBoxAmount() {
    57         return energyBoxs.length;
    58     }
    59     
    60 }
     1 package com.service.cone;
     2 
     3 public class EnergySystemTest {
     4 
     5     //能量块的个数
     6     public static final int BOX_AMOUNT = 100;
     7     //每个能量块的初始化能量值
     8     public static final double INITIAL_ENERGY = 1000;
     9     
    10     
    11     
    12     public static void main(String[] args) {
    13 
    14         EnergySystem eng = new EnergySystem(BOX_AMOUNT,INITIAL_ENERGY);
    15         
    16         for (int i = 0; i < BOX_AMOUNT; i++) {
    17             
    18             EnergyTransferTask task = new EnergyTransferTask(eng, i, INITIAL_ENERGY);
    19             
    20             Thread t = new Thread(task,"TransferThread_"+i);
    21             t.start();
    22                     
    23         }
    24         
    25     }
    26 
    27 }
     1 package com.service.cone;
     2 
     3 public class EnergyTransferTask implements Runnable {
     4 
     5     private EnergySystem energySystem;
     6 
     7     //下标
     8     private int fromBox;
     9     
    10     //每次转换的最大能量
    11     private double maxAmount;
    12     
    13     //休眠时间
    14     private int Delay = 10;
    15     
    16     
    17     public EnergyTransferTask(EnergySystem energySystem,int from,double max) {
    18         
    19         this.energySystem = energySystem;
    20         this.fromBox = from;
    21         this.maxAmount = max;
    22     }
    23     
    24     
    25     @Override
    26     public void run() {
    27 
    28         try {
    29             while(true){
    30                 
    31 //                static double random() 
    32 //                返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。
    33                 
    34                 int toBox = (int)(energySystem.getBoxAmount()*Math.random());
    35                 
    36                 double amount = maxAmount*Math.random();
    37                 
    38                 energySystem.transfer(fromBox, toBox, amount);
    39                 
    40                 Thread.sleep((int)(Delay*Math.random()));
    41                 
    42             }
    43         } catch (InterruptedException e) {
    44             e.printStackTrace();
    45         }
    46         
    47     }
    48 
    49 }
    抱怨没有用,只能靠自己
  • 相关阅读:
    Power of Cryptography
    Radar Installation
    Emag eht htiw Em Pleh
    Help Me with the Game
    89. Gray Code
    87. Scramble String
    86. Partition List
    85. Maximal Rectangle
    84. Largest Rectangle in Histogram
    82. Remove Duplicates from Sorted List II
  • 原文地址:https://www.cnblogs.com/mybatis/p/5896181.html
Copyright © 2011-2022 走看看