zoukankan      html  css  js  c++  java
  • 多线程Demo

    thread.join() 方法主要是让调用该方法的thread完成run方法里面的东西后, 再执行join()方法后面的代码

    下面是一个简单版的例子,通过继承Thread 实现同步和异步多线程

    同步

    /**
     * 同步
     */
    public class SynThread extends Thread {
        private int num;
     
        public SynThread(int num) {
            this.num = num;
        }
     
        @Override
        public void run() {
            //保证同步,因为使用了thread.sleep,所以必须对整个thread类加锁,否则的话只需对将run()方法改为 public synchronized void run()
            synchronized (SynThread.class) {
                System.out.println("syn thread:" + num + " start");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("syn thread:" + num + " end");
            }
        }
    }
    

      异步

    /**
     * 异步
     */
    public class AsynThread extends Thread{
        private int num;
        public  AsynThread(int num){
            this.num=num;
        }
        @Override
        public void run() {
            System.out.println("asyn thread:" + num+" start");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("asyn thread:" + num+" end");
        }
    }
    

     同步和异步多线程

    import java.util.ArrayList;
    import java.util.List;
     
    public class MultiThreadDemo {
        public static void testMultiSynThread(int num){
            System.out.println("等待子线程完成:");
            List<SynThread> threadList = new ArrayList<SynThread>();
            for (int i = 1; i < num; i++) {
                SynThread thread = new SynThread(i);
                threadList.add(thread);
                thread.start();
            }
            //使用thread.join()等待子线程完成
            for (SynThread thread : threadList) {
                try {
                    thread.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
     
        public static void testMultiAsynThread(int num){
            System.out.println("等待子线程完成:");
            List<AsynThread> threadList = new ArrayList<AsynThread>();
            for (int i = 1; i < num; i++) {
                AsynThread thread = new AsynThread(i);
                threadList.add(thread);
                thread.start();
            }
            //使用thread.join()等待子线程完成
            for (AsynThread thread : threadList) {
                try {
                    thread.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
     
        public static void main(String[] args) {
     
            System.out.println("同步多线程开始:");
            long start=System.currentTimeMillis();
            testMultiSynThread(1000);
            long end=System.currentTimeMillis();
            System.out.println("cost time:"+(end-start));
            System.out.println("异步多线程开始:");
            start=System.currentTimeMillis();
            testMultiAsynThread(1000);
            end=System.currentTimeMillis();
            System.out.println("cost time:"+(end-start));
     
        }
    }
    

      

    最后跑了下有10个线程的时候,同步和异步花费的时间,当然每次跑的结果都不一样,但是异步比同步快,因为同步多线程中必须一个线程的run中的代码执行完后才能执行下一个线程

    syn cost time:9005

    asyn cost time:1005

     

  • 相关阅读:
    [20141124]sql server密码过期,通过SSMS修改策略报错
    [20141121]无法通过powershell读取sql server性能计数器问题
    深入解析Windows操作系统笔记——CH3系统机制
    深入解析Windows操作系统笔记——CH2系统结构
    [MySQL Reference Manual] 8 优化
    [20140928]创建连接到MySQL的连接服务器
    [20140829]spinlock导致cpu居高不下
    Percona XtraBackup User Manual 阅读笔记
    [MySQL Reference Manual] 7 备份和恢复
    [Linux 存储管理] LVM结构
  • 原文地址:https://www.cnblogs.com/zhu-tingting/p/7508461.html
Copyright © 2011-2022 走看看