• Java中的并发线程操作(只贴代码,内有注释)


    package com.thread1;
    
    public class LiffOff implements Runnable{
        
        protected int countDown = 10;
        private static int taskCount = 0;
        private final int id = taskCount++;
        
        public LiffOff() {
        }
    
        public LiffOff(int countDown) {
            this.countDown = countDown;
        }
        
        public String status(){
            return "#" + id + "("+(countDown > 0? countDown:"Liftoff!")+").";
        }
    
        @Override
        public void run() {
            while(countDown-- > 0){
                System.out.println(status());
                Thread.yield();
            }
        }
    
    }
    package com.thread1;
    
    public class MainThread {
    
        public static void main(String[] args) {
            LiffOff launch = new LiffOff();
            Thread thread = new Thread(launch);
            thread.start();
        }
    }

    2.使用Executors.newCachedThreadPool

    调用线程

    package com.thread1;
    
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    public class CachedThreadPool {
        
        public static void main(String[] args) {
            ExecutorService exec = Executors.newCachedThreadPool();
            for(int i=0;i<5;i++){
                exec.execute(new LiffOff());
            }
            exec.shutdown();
        }
    }

    3.使用Executors.newFixedThreadPool

    package com.thread1;
    
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    public class FixedThreadPool {
    
        public static void main(String[] args) {
            ExecutorService exec = Executors.newFixedThreadPool(5);
            for(int i=0;i<5;i++){
                exec.execute(new LiffOff());
            }
            exec.shutdown();
        }
    }

    4.带返回值的线程,实现callable

    package com.thread1;
    
    import java.util.concurrent.Callable;
    
    public class TaskWithResult implements Callable<String>{
        
        private int id;
    
        public TaskWithResult(int id) {
            this.id = id;
        }
        
        @Override
        public String call() throws Exception {
            
            return " result of TaskWithResult "+id;
        }
    
    }
    package com.thread1;
    
    import java.util.ArrayList;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;
    
    public class CallDemo {
    
        public static void main(String[] args) {
            ExecutorService exec = Executors.newCachedThreadPool();
            ArrayList<Future<String>> results = new ArrayList<Future<String>>();
            
            for(int i=0;i<10;i++){
                //submit方法会产生future对象,使用isDone()来查询future是否完成
                results.add(exec.submit(new TaskWithResult(i)));
            }
            for(Future<String> fs : results){
                try {
                    System.out.println(fs.get());
                } catch (InterruptedException | ExecutionException e) {
                    e.printStackTrace();
                }finally {
                    exec.shutdown();
                }
            }
        }
    }

    5.线程的睡眠

    package com.thread1;
    
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.TimeUnit;
    
    public class SleeptingTask extends LiffOff{
        
        public static void main(String[] args) {
            ExecutorService exec = Executors.newCachedThreadPool();
            for(int i=0;i<5;i++){
                exec.execute(new SleeptingTask());
            }
            exec.shutdown();
        }
    
        @Override
        public void run() {
            while(countDown-- >0){
                System.out.println(status());
                try {
                    TimeUnit.MILLISECONDS.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    System.out.println("interrupted");
                }
            }
        }
    
    }

    6.线程的优先级  

    .yield()暗示其他线程可以运行
    package com.thread1;
    
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    /**
     * 通过 getPriority setPriority获取设置线程的优先级
     * @author admin
     *
     */
    public class SimplePriorities implements Runnable{
    
        private int countDown = 5;
        private    volatile double d;
        private int priority;
        
        public SimplePriorities(int priority) {
            this.priority = priority;
        }
    
        @Override
        public String toString() {
            return Thread.currentThread()+" : "+countDown;
        }
        @Override
        public void run() {
            Thread.currentThread().setPriority(priority);
            while(true){
                for(int i=1;i>10000;i++){
                    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=1;i>5;i++)
            exec.execute(new SimplePriorities(Thread.MAX_PRIORITY));
            exec.execute(new SimplePriorities(Thread.MIN_PRIORITY));
            exec.shutdown();
        }
    
    }

    7.线程的加入-join(),也可在join()方法带上一个超时参数,如果目标线程在此期间还没有结束,join()总能返回.

    package com.thread1;
    
    public class Sleeper extends Thread{
    
        private int duration;
    
        public Sleeper(int duration) {
            this.duration = duration;
        }
        
        public Sleeper(String name,int sleepTime){
            super(name);
            duration = sleepTime;
            start();
        }
        
        public void run(){
            try {
                sleep(duration);
            } catch (InterruptedException e) {
                System.out.println(getName()+"was interrupted. isInterrupted():"+isInterrupted());
                return;
            }
            System.out.println(getName()+" has awakened");
        }
    }
    package com.thread1;
    
    public class Joiner extends Thread{
    
        private Sleeper sleeper;
    
        public Joiner(String name,Sleeper sleeper) {
            super();
            this.sleeper = sleeper;
            start();
        }
        
        public void run(){
            try {
                sleeper.join();
            } catch (Exception e) {
                System.out.println("interrupted");
            }
            System.out.println(getName()+ " join completed");
        }
        
    }
    package com.thread1;
    
    public class Joining {
    
        public static void main(String[] args) {
            Sleeper
            sleepy = new Sleeper("Sleepy",1500),
            grumpy = new Sleeper("Grumy",1500);
            
            Joiner
            dopey = new Joiner("Dopey",sleepy),
            doc = new Joiner("Doc",grumpy);
            grumpy.interrupt();
        }
    }

    执行结果:

    8.线程中的异常捕获

      1:制造异常

     

    package com.thread1;
    
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    public class ExceptionThread implements Runnable{
    
        @Override
        public void run() {
            throw new RuntimeException();
        }
    
        public static void main(String[] args) {
            ExecutorService exec = Executors.newCachedThreadPool();
            exec.execute(new ExceptionThread());
        }
    }

    输出如下:

  • 相关阅读:
    解决DataGridView绑定List后不能排序的问题
    最新的皮肤下载
    我收录的名言
    HttpRequest访问Https带有证书并使用WSDL文档生成代理类方案(2)
    最新的Functions 类
    华兴软通短信接口简单使用WebServices版
    最新的SqlHelper 类
    闲来没事写个记事本玩玩!!!
    "基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系"证书验证失败的解决过程(3)
    FCK配置
  • 原文地址:https://www.cnblogs.com/tingbogiu/p/5846801.html
Copyright © 2020-2023  润新知