当前访客身份:游客 [ 登录  | 注册加入尚学堂]
启用新域名sxt.cn
新闻资讯

java 线程返回值,优先级,后台线程 示例代码

helloworld 发表于 2年前  | 评论(0 )| 阅读次数(794 )|   0 人收藏此文章,   我要收藏
摘要 java 线程返回值,优先级,后台线程 示例代码
java 线程返回值,休眠,优先级,后台线程  示例代码
  
  package org.rui.thread.basic;  
      
    import java.util.ArrayList;  
    import java.util.concurrent.Callable;  
    import java.util.concurrent.ExecutionException;  
    import java.util.concurrent.ExecutorService;  
    import java.util.concurrent.Executors;  
    import java.util.concurrent.Future;  
    /**  
     * 从任务中产生返回值 Callable接口应用  
     * 也可以用isDone()来查询Future是否已经完成  
     * 也可以直接get()进行检查   
     *   
     * @author lenovo  
     *  
     */  
      
    class TaskWithResult implements Callable<String>  
    {  
        private int id;   
        public TaskWithResult(int id){this.id=id;}  
          
        @Override  
        public String call() throws Exception {  
            return "result of TaskWotjResult"+id;  
        }  
    }  
      
      
    public class CallableDemo  {  
        /////////////////  
        public static void main(String[] args) {  
            ExecutorService exec=Executors.newCachedThreadPool();  
            ArrayList<Future<String>> result=new ArrayList<Future<String>>();  
            for(int i=0;i<10;i++)  
            {  
                result.add(exec.submit(new TaskWithResult(i)));  
            }  
              
            for(Future<String> fs:result)  
                try {  
                    System.out.println(fs.get());  
                } catch (InterruptedException e) {  
                    e.printStackTrace();  
                    return;  
                } catch (ExecutionException e) {  
                    e.printStackTrace();  
                }finally  
                {  
                    exec.shutdown();  
                }  
              
        }  
      
    }  
      
    /**  
     * output:  
    result of TaskWotjResult0  
    result of TaskWotjResult1  
    result of TaskWotjResult2  
    result of TaskWotjResult3  
    result of TaskWotjResult4  
    result of TaskWotjResult5  
    result of TaskWotjResult6  
    result of TaskWotjResult7  
    result of TaskWotjResult8  
    result of TaskWotjResult9  
     */  
  
   package org.rui.thread.basic;  
      
    import java.util.concurrent.ExecutorService;  
    import java.util.concurrent.Executors;  
    /**  
     * 线程优先级  
     * @author lenovo  
     *  
     */  
    public class SimpleProorities implements Runnable{  
        
        private int countDown=5;  
        private volatile double d; //No optimization  
        private int priority;  
          
        public SimpleProorities(int priority)  
        {  
            this.priority=priority;  
        }  
          
        public String toString()  
        {  
            return Thread.currentThread()+" : "+countDown;  
        }  
           
        @Override  
        public void run() {  
            Thread.currentThread().setPriority(priority);//开头设置优先级  
            while(true)  
            {  
                for(int i=1;i<100000;i++)  
                {  
                    //比任何其他值都更接近 pi(即圆的周长与直径之比)的 double 值。  
                    //任何其他值都更接近 e(即自然对数的底数)的 double 值。  
                    d+=(Math.PI+Math.E)/(double)i;  
                    if(i%1000==0)  
                        Thread.yield();  
                }  
                  
                System.out.println(this);  
                if(--countDown==0)return;  
            }  
              
        }  
          
        public static void main(String[] args) {  
            ExecutorService exec=Executors.newCachedThreadPool();  
            for(int i=0;i<5;i++)  
                exec.execute(new SimpleProorities(Thread.MIN_PRIORITY));  
                exec.execute(new SimpleProorities(Thread.MAX_PRIORITY));//优先级高  
              
            exec.shutdown();  
              
        }  
      
    }  
 
   
package org.rui.thread.basic;  
      
    import java.util.concurrent.TimeUnit;  
    /**  
     * 后台线程  
     * 是指在程序运行的时候在后台提供一种通用服务的线程  
     * @author lenovo  
     *  
     */  
    public class SimpleDeamons  implements Runnable{  
      
        @Override  
        public void run() {  
            try {  
                    while(true)  
                    {  
                          
                            TimeUnit.MILLISECONDS.sleep(100);  
                            System.out.println(Thread.currentThread()+" >>> "+this);  
                          
                    }  
            } catch (InterruptedException e) {  
                e.printStackTrace();  
            }  
        }  
      
        public static void main(String[] args) {  
            for(int i=0;i<10;i++)  
            {  
                Thread daemon=new Thread(new SimpleDeamons());  
                daemon.setDaemon(true);//设为后台 线程  
                daemon.start();  
            }  
            System.out.println("all daemons started------");  
            try {  
                //试试调整休眠时间 以观察这个行为  
                TimeUnit.MILLISECONDS.sleep(175);  
            } catch (InterruptedException e) {  
                e.printStackTrace();  
            }  
        }  
    }  
    /**  
     * output:  
     all daemons started------  
    Thread[Thread-8,5,main] >>> org.rui.thread.basic.SimpleDeamons@1e4f7c2  
    Thread[Thread-9,5,main] >>> org.rui.thread.basic.SimpleDeamons@10dc6b5  
    Thread[Thread-4,5,main] >>> org.rui.thread.basic.SimpleDeamons@1d0fafc  
    Thread[Thread-6,5,main] >>> org.rui.thread.basic.SimpleDeamons@c9d92c  
    Thread[Thread-0,5,main] >>> org.rui.thread.basic.SimpleDeamons@145f0e3  
    Thread[Thread-2,5,main] >>> org.rui.thread.basic.SimpleDeamons@1e4f7c2  
    Thread[Thread-5,5,main] >>> org.rui.thread.basic.SimpleDeamons@b8f8eb  
    Thread[Thread-1,5,main] >>> org.rui.thread.basic.SimpleDeamons@d0af9b  
    Thread[Thread-7,5,main] >>> org.rui.thread.basic.SimpleDeamons@f47396  
    Thread[Thread-3,5,main] >>> org.rui.thread.basic.SimpleDeamons@170bea5  
      
     */  

    package org.rui.thread.basic;  
      
    import java.util.concurrent.ThreadFactory;  
      
    /**  
     *通过编写定制的threadFactory可以定制由Executor创建的线程的属性 (后台,优先级,名称)  
     * @author lenovo  
     *  
     */  
    public class DaemonThreadFactory implements ThreadFactory{  
      
        @Override  
        public Thread newThread(Runnable r) {  
            Thread thread=new Thread(r);  
            thread.setDaemon(true);  
            return thread;  
        }  
      
    }  


 

    package org.rui.thread.basic;  
      
    import java.util.concurrent.ExecutorService;  
    import java.util.concurrent.Executors;  
    import java.util.concurrent.TimeUnit;  
      
    /**  
     * 这与普通的ThreadFactory的唯一差异就是它将后台状态全部设置为了true  
     * 你现在可以用一个新的DaemonThreadFactory作为参数传递给executory.newCachedThreadPool()  
     * @author lenovo  
     *  
     */  
    public class DeamonFromFactory implements Runnable{  
      
        @Override  
        public void run() {  
            try {  
                while(true)  
                {  
                    TimeUnit.MILLISECONDS.sleep(100);  
                    System.out.println(Thread.currentThread()+" >> "+this);  
                }  
            } catch (Exception e) {  
              
            }  
              
        }  
        /////  
        public static void main(String[] args) throws InterruptedException {  
            //每一个ExecutorService创建方法都被重载为接受一个threadfactory对象  
            //而这个对象将被用来创建新的线程  
            ExecutorService exec=Executors.newCachedThreadPool(new DaemonThreadFactory());  
            for(int i=0;i<10;i++)  
            {  
                exec.execute(new DeamonFromFactory());  
            }  
              
            System.out.println("all daemons started");  
            TimeUnit.MILLISECONDS.sleep(500);  
        }  
      
    }  
      
    /**output:  
     all daemons started  
    Thread[Thread-0,5,main] >> org.rui.thread.basic.DeamonFromFactory@8ab708  
    Thread[Thread-3,5,main] >> org.rui.thread.basic.DeamonFromFactory@9934d4  
    Thread[Thread-5,5,main] >> org.rui.thread.basic.DeamonFromFactory@f6ac0b  
    Thread[Thread-4,5,main] >> org.rui.thread.basic.DeamonFromFactory@1c0f2e5  
    Thread[Thread-2,5,main] >> org.rui.thread.basic.DeamonFromFactory@13c7378  
    Thread[Thread-1,5,main] >> org.rui.thread.basic.DeamonFromFactory@54c4ad  
    Thread[Thread-6,5,main] >> org.rui.thread.basic.DeamonFromFactory@5b8827  
    Thread[Thread-7,5,main] >> org.rui.thread.basic.DeamonFromFactory@d09ad3  
    Thread[Thread-8,5,main] >> org.rui.thread.basic.DeamonFromFactory@147c1db  
    Thread[Thread-9,5,main] >> org.rui.thread.basic.DeamonFromFactory@82d37  
    Thread[Thread-0,5,main] >> org.rui.thread.basic.DeamonFromFactory@8ab708  
    Thread[Thread-5,5,main] >> org.rui.thread.basic.DeamonFromFactory@f6ac0b  
    Thread[Thread-3,5,main] >> org.rui.thread.basic.DeamonFromFactory@9934d4  
    Thread[Thread-1,5,main] >> org.rui.thread.basic.DeamonFromFactory@54c4ad  
    Thread[Thread-4,5,main] >> org.rui.thread.basic.DeamonFromFactory@1c0f2e5  
    Thread[Thread-2,5,main] >> org.rui.thread.basic.DeamonFromFactory@13c7378  
    Thread[Thread-6,5,main] >> org.rui.thread.basic.DeamonFromFactory@5b8827  
    Thread[Thread-8,5,main] >> org.rui.thread.basic.DeamonFromFactory@147c1db  
    Thread[Thread-7,5,main] >> org.rui.thread.basic.DeamonFromFactory@d09ad3  
    Thread[Thread-9,5,main] >> org.rui.thread.basic.DeamonFromFactory@82d37  
    Thread[Thread-5,5,main] >> org.rui.thread.basic.DeamonFromFactory@f6ac0b  
    Thread[Thread-1,5,main] >> org.rui.thread.basic.DeamonFromFactory@54c4ad  
    Thread[Thread-0,5,main] >> org.rui.thread.basic.DeamonFromFactory@8ab708  
    Thread[Thread-3,5,main] >> org.rui.thread.basic.DeamonFromFactory@9934d4  
    Thread[Thread-7,5,main] >> org.rui.thread.basic.DeamonFromFactory@d09ad3  
    Thread[Thread-4,5,main] >> org.rui.thread.basic.DeamonFromFactory@1c0f2e5  
    Thread[Thread-2,5,main] >> org.rui.thread.basic.DeamonFromFactory@13c7378  
    Thread[Thread-6,5,main] >> org.rui.thread.basic.DeamonFromFactory@5b8827  
    Thread[Thread-8,5,main] >> org.rui.thread.basic.DeamonFromFactory@147c1db  
    Thread[Thread-9,5,main] >> org.rui.thread.basic.DeamonFromFactory@82d37  
    Thread[Thread-1,5,main] >> org.rui.thread.basic.DeamonFromFactory@54c4ad  
    Thread[Thread-5,5,main] >> org.rui.thread.basic.DeamonFromFactory@f6ac0b  
    Thread[Thread-3,5,main] >> org.rui.thread.basic.DeamonFromFactory@9934d4  
    Thread[Thread-0,5,main] >> org.rui.thread.basic.DeamonFromFactory@8ab708  
    Thread[Thread-8,5,main] >> org.rui.thread.basic.DeamonFromFactory@147c1db  
    Thread[Thread-6,5,main] >> org.rui.thread.basic.DeamonFromFactory@5b8827  
    Thread[Thread-2,5,main] >> org.rui.thread.basic.DeamonFromFactory@13c7378  
    Thread[Thread-4,5,main] >> org.rui.thread.basic.DeamonFromFactory@1c0f2e5  
    Thread[Thread-7,5,main] >> org.rui.thread.basic.DeamonFromFactory@d09ad3  
    Thread[Thread-9,5,main] >> org.rui.thread.basic.DeamonFromFactory@82d37  
    Thread[Thread-0,5,main] >> org.rui.thread.basic.DeamonFromFactory@8ab708  
    Thread[Thread-3,5,main] >> org.rui.thread.basic.DeamonFromFactory@9934d4  
    Thread[Thread-1,5,main] >> org.rui.thread.basic.DeamonFromFactory@54c4ad  
    Thread[Thread-5,5,main] >> org.rui.thread.basic.DeamonFromFactory@f6ac0b  
    Thread[Thread-8,5,main] >> org.rui.thread.basic.DeamonFromFactory@147c1db  
    Thread[Thread-6,5,main] >> org.rui.thread.basic.DeamonFromFactory@5b8827  
    Thread[Thread-2,5,main] >> org.rui.thread.basic.DeamonFromFactory@13c7378  
    Thread[Thread-4,5,main] >> org.rui.thread.basic.DeamonFromFactory@1c0f2e5  
    Thread[Thread-7,5,main] >> org.rui.thread.basic.DeamonFromFactory@d09ad3  
      
     */  


 

    package org.rui.thread.basic;  
      
    import java.util.concurrent.BlockingQueue;  
    import java.util.concurrent.SynchronousQueue;  
    import java.util.concurrent.ThreadPoolExecutor;  
    import java.util.concurrent.TimeUnit;  
    /**  
     * 每个静态的executorService创建方法都被重载为接受一个threadfactory对象,  
     * 而这个对象将被用来创建新的线程  
     * @author lenovo  
     *  
     */  
    public class DaemonThreadPoolExecutor extends ThreadPoolExecutor {  
      
        public DaemonThreadPoolExecutor() {  
            super(0,Integer.MAX_VALUE,60L,TimeUnit.SECONDS,  
                    new SynchronousQueue<Runnable>(),  
                    new DaemonThreadFactory());  
              
        }  
      
    }  


 

    package org.rui.thread.basic;  
      
    import java.util.concurrent.TimeUnit;  
      
    /**  
     * 可以通过调用isDaemon方法来确定线程是否是一个后台线程。如果是一个后台线程,  
     * 那么创建的任何线程将被自动设置成后台线程,如下例所示  
     * @author lenovo  
     *  
     */  
      class Daemon implements Runnable {  
      
        private Thread[] t=new Thread[10];  
          
        @Override  
        public void run() {  
            for(int i=0;i<t.length;i++)  
            {  
                t[i]=new Thread(new DaemonSpawn());  
                t[i].start();  
                System.out.println("daemonSpawn "+i+" started, ");  
            }  
            for(int i=0;i<t.length;i++)  
            {  
                System.out.println("t["+i+"].isDaemon()="+t[i].isDaemon()+" ,");  
            }  
            /**  
             * 对线程调度器  java线程机制的一部分,可以将cpu从一个线程转移给另一个线程 的一种建议  
             * 它在声明: 我已经执行完生命周期中最重要的部分了,此刻正是切换给其他任务执行一段时间的大好时机    
             * 完全是先择性的,  
             *   
             */  
            while(true)  
                Thread.yield();//把控制权交给其它线程  
              
        }  
      
    }  
      
        class DaemonSpawn implements Runnable  
        {  
            @Override  
            public void run()   
            {  
                while(true)  
                    Thread.yield();  
            }  
         }  
        ////////////////////////////////////  
        public class Daemons   
        {  
            public static void main(String[] args) throws InterruptedException   
            {  
                Thread d=new Thread(new Daemon());  
                d.setDaemon(true);  
                d.start();  
                System.out.println("d.isDaemon()="+d.isDaemon()+"  , ");  
                TimeUnit.MILLISECONDS.sleep(1);  
            }  
              
        }  
    /**  
     d.isDaemon()=true  ,   
    daemonSpawn 0 started,   
    daemonSpawn 1 started,   
    daemonSpawn 2 started,   
    daemonSpawn 3 started,   
    daemonSpawn 4 started,   
    daemonSpawn 5 started,   
    daemonSpawn 6 started,   
    daemonSpawn 7 started,   
    daemonSpawn 8 started,   
    daemonSpawn 9 started,   
    t[0].isDaemon()=true ,  
    t[1].isDaemon()=true ,  
    t[2].isDaemon()=true ,  
    t[3].isDaemon()=true ,  
    t[4].isDaemon()=true ,  
    t[5].isDaemon()=true ,  
    t[6].isDaemon()=true ,  
    t[7].isDaemon()=true ,  
    t[8].isDaemon()=true ,  
    t[9].isDaemon()=true ,  
     */  


 

    package org.rui.thread.basic;  
      
    import java.util.concurrent.TimeUnit;  
      
    /**  
     * 你就该意识到后台进程在不执行finally子句的情况下就会终止其run()方法  
     * @author lenovo  
     *  
     */  
      
    class ADeamon implements Runnable{  
      
        @Override  
        public void run() {  
            try {  
                System.out.println("starting adaemon");  
                TimeUnit.MILLISECONDS.sleep(1);  
            } catch (InterruptedException e) {  
                System.out.println("正在退出 经过 InterruptedException");  
            }finally  
            {  
                //这应该 run?  
                System.out.println("this should always run?");  
            }  
              
        }  
          
     }  
    public class DaemonDontRunFinally  {  
        //你将看到finally子句不会执行  如果注释t.setDaemon(true); 就会看到  
      public static void main(String[] args) {  
        Thread t=new Thread(new ADeamon());  
        t.setDaemon(true);  
        t.start();  
        //一旦main退出 jvm就会立即关闭后台线程  
    }  
    }  
    /**output:  
     starting adaemon  
     */  




分享到:0
关注微信,跟着我们扩展技术视野。每天推送IT新技术文章,每周聚焦一门新技术。微信二维码如下:
微信公众账号:尚学堂(微信号:bjsxt-java)
声明:博客文章版权属于原创作者,受法律保护。如果侵犯了您的权利,请联系管理员,我们将及时删除!
(邮箱:webmaster#sxt.cn(#换为@))
北京总部地址:北京市海淀区西三旗桥东建材城西路85号神州科技园B座三层尚学堂 咨询电话:400-009-1906 010-56233821
Copyright 2007-2015 北京尚学堂科技有限公司 京ICP备13018289号-1 京公网安备11010802015183