zoukankan      html  css  js  c++  java
  • core java

    ConsoleTest,这个程序如果在IDE里运行就会因无法获得控制台而报错

    import java.io.Console;
    
    public class ConsoleTest {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Console console=System.console();
            String username=console.readLine("username:");
            char[] pwd=console.readPassword("password:");
            System.out.println(username);
            System.out.println(pwd);
        }
    
    }
    View Code

    ProxyTest

    package corejava;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    import java.util.Arrays;
    import java.util.Random;
    class TraceHandler implements InvocationHandler{
        private Object target;
        public TraceHandler (Object t)
        {
            target=t;
        }
        
        public Object invoke(Object proxy,Method m,Object[] args) throws Throwable{
            System.out.print(target);
            System.out.print("."+m.getName()+"(");
            if(args!=null){
                for(int i=0;i<args.length;i++){
                    System.out.print(args[i]);
                    if(i<args.length-1){
                        System.out.println(",");
                    }
                }
            }
            System.out.println(")");
            return m.invoke(target,args);
        }
    }
    public class ProxyTest {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Object[]elements=new Object[1000];
            
            for(int i=0;i<elements.length;i++){
                Integer value=i+1;
                InvocationHandler handler=new TraceHandler(value);
                //null表示使用默认的类加载器
                Object proxy=Proxy.newProxyInstance(null, new Class[]{Comparable.class}, handler);
                elements[i]=proxy;
            }
            
            Integer key=new Random().nextInt(elements.length)+1;
            
            int result =Arrays.binarySearch(elements, key);
            
            if(result>0){
                System.out.println(elements[result]);
            }
        }
    }
    View Code

    输出:

    500.compareTo(159)
    250.compareTo(159)
    125.compareTo(159)
    187.compareTo(159)
    156.compareTo(159)
    171.compareTo(159)
    163.compareTo(159)
    159.compareTo(159)
    159.toString()
    159

    BlockingQueueTest阻塞队列实现同步

    package corejava;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.Scanner;
    import java.util.concurrent.ArrayBlockingQueue;
    import java.util.concurrent.BlockingQueue;
    
    public class BlockingQueueTest {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner in = new Scanner(System.in);
            System.out.println("Enter base direction");
            String directory =in.nextLine();
            System.out.print("Enter keyword :");
            String keyword = in.nextLine();
            final int FILE_QUEUE_SIZE=10;
            final int SEARCH_THREADS=100;
            
            BlockingQueue queue=new  ArrayBlockingQueue<>(FILE_QUEUE_SIZE);
            FileEnumerationTask enumrator=new FileEnumerationTask(queue,new File(directory));
            new Thread(enumrator).start();
            for(int i=0;i<SEARCH_THREADS;i++){
                new Thread(new SearchTask(queue,keyword)).start();
            }
        }
    }
    class FileEnumerationTask implements Runnable{
        public static File DUMMY=new File("");
        private BlockingQueue<File> queue;
        private File strartingDirectory;
        
        public FileEnumerationTask(BlockingQueue<File> queue,File strartingDirectory){
            this.queue=queue;
            this.strartingDirectory=strartingDirectory;
        }
        
        public void run(){
            try{
                enumrator(strartingDirectory);
                queue.put(DUMMY);
            }catch(Exception e){}
        }
        public void enumrator(File directory) throws InterruptedException{
            File[] files=directory.listFiles();
            for(File file:files){
                if(file.isDirectory()){
                    enumrator(file);
                }else{
                    queue.put(file);
                }
            }
        }
    }
    class SearchTask implements Runnable{
        private BlockingQueue<File> queue;
        private String keyword;
        
        public SearchTask(BlockingQueue<File> queue,String keyword){
            this.queue=queue;
            this.keyword=keyword;
        }
        public void run(){
            try{
                boolean done=false;
                while(!done){
                    File file=queue.take();
                    if(file==FileEnumerationTask.DUMMY){
                        queue.put(file);
                        done=true;
                    }else{
                        search(file);
                    }
                }
            }catch(IOException e){
                e.printStackTrace();
            }
            catch(InterruptedException e){
                
            }
        }
        public void search(File file) throws IOException{
            try(Scanner in =new Scanner(file)){
                int lineNumber=0;
                while(in.hasNextLine()){
                    lineNumber++;
                    String line=in.nextLine();
                    if(line.contains(keyword)){
                        System.out.printf("%s:%d:%s%n",file.getPath(),lineNumber,line);
                    }
                }
            }
        }
    }
    View Code

    ForkJoinTest

    package corejava;
    
    import java.util.concurrent.ForkJoinPool;
    import java.util.concurrent.RecursiveTask;
    
    public class ForkJoinTest {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            final int SIZE =10000000;
            double[] numbers=new double[SIZE];
            for(int i=0;i<SIZE;i++){
                numbers[i]=Math.random();
            }
            Counter counter=new Counter(numbers,0,numbers.length,
                        new Filter(){
                            public boolean accept(double x){
                                return x>0.5;
                            }
                        });
            ForkJoinPool pool=new ForkJoinPool();
            pool.invoke(counter);
            System.out.println(counter.join());
        }
    }
    interface Filter{
        boolean accept(double t);
    }
    class Counter extends RecursiveTask<Integer>{
        public static final int THRESHOLD=1000;
        private double[] values;
        private int from;
        private int to;
        private Filter filter;
        public Counter(double[]values,int from,int to,Filter filter){
            this.values=values;
            this.from=from;
            this.to=to;
            this.filter=filter;
        }
        protected Integer compute(){
            if(to-from<THRESHOLD){
                int count =0;
                for(int i=from;i<to;i++){
                    if(filter.accept(values[i])){
                        count++;
                    }
                }
                return count;
            }else{
                int mid =(from+to)/2;
                Counter first = new Counter(values,from,mid,filter);
                Counter second = new Counter(values,mid,to,filter);
                invokeAll(first,second);
                return first.join()+second.join();
            }
        }
    }
    View Code

    输出:

    5001345
  • 相关阅读:
    STM32驱动TEA5767收音机模块
    stm32驱动DS1302芯片
    NRF24L01无线通讯模块驱动
    MQ-2烟雾传感器启动
    HCSR04超声波传感器驱动
    RDA5820收音机芯片驱动
    SD卡初始化以及命令详解
    STM32硬件IIC操作
    STM32驱动MPU6050
    BMP085气压传感器驱动
  • 原文地址:https://www.cnblogs.com/yuanzhenliu/p/5799670.html
Copyright © 2011-2022 走看看