• 大小: 8.84MB
    文件类型: .7z
    金币: 1
    下载: 0 次
    发布日期: 2023-10-17
  • 语言: Java
  • 标签: Java  

资源简介

Java 并发编程实战pdf + 随书源码 (书高清版,带超详细书签目录) 本资源转载自网络,供学习研究之用,如用于商业用途,请购买正版,如有侵权,请联系我或CSDN删除。

资源截图

代码片段和文件信息

package net.jcip.examples;

import java.util.*;

/**
 * Animals
 * 


 * Thread confinement of local primitive and reference variables
 *
 * @author Brian Goetz and Tim Peierls
 */
public class Animals {
    Ark ark;
    Species species;
    Gender gender;

    public int loadTheArk(Collection candidates) {
        SortedSet animals;
        int numPairs = 0;
        Animal candidate = null;

        // animals confined to method don‘t let them escape!
        animals = new TreeSet(new SpeciesGenderComparator());
        animals.addAll(candidates);
        for (Animal a : animals) {
            if (candidate == null || !candidate.isPotentialMate(a))
                candidate = a;
            else {
                ark.load(new AnimalPair(candidate a));
                ++numPairs;
                candidate = null;
            }
        }
        return numPairs;
    }


    class Animal {
        Species species;
        Gender gender;

        public boolean isPotentialMate(Animal other) {
            return species == other.species && gender != other.gender;
        }
    }

    enum Species {
        AARDVARK BENGAL_TIGER CARIBOU DINGO ELEPHANT FROG GNU HYENA
        IGUANA JAGUAR KIWI LEOPARD MASTADON NEWT OCTOPUS
        PIRANHA QUETZAL RHINOCEROS SALAMANDER THREE_TOED_SLOTH
        UNICORN VIPER WEREWOLF XANTHUS_HUMMINBIRD YAK ZEBRA
    }

    enum Gender {
        MALE FEMALE
    }

    class AnimalPair {
        private final Animal one two;

        public AnimalPair(Animal one Animal two) {
            this.one = one;
            this.two = two;
        }
    }

    class SpeciesGenderComparator implements Comparator {
        public int compare(Animal one Animal two) {
            int speciesCompare = one.species.compareTo(two.species);
            return (speciesCompare != 0)
                    ? speciesCompare
                    : one.gender.compareTo(two.gender);
        }
    }

    class Ark {
        private final Set loadedAnimals = new HashSet();

        public void load(AnimalPair pair) {
            loadedAnimals.add(pair);
        }
    }
}



评论

共有 条评论