zoukankan      html  css  js  c++  java
  • Man方法

    Main方法相当一个主线程,JVM会自动寻找class文件中的main方法并执行(请思考tomcat加载java web项目启动的线程数和每次tomcat服务器接收到请求,是不是要发起一个线程去处理)

    以下的例子展现了Main主线程中启动了两个分支线程(mTh1和mTh2)

    package com.kevin.test1;
    
    class Thread1 extends Thread{
        private String name;
        public Thread1(String name) {
            super(name);
            this.name=name;
        }
        public void run() {
            System.out.println(Thread.currentThread().getName() + " 线程运行开始!");
            for (int i = 0; i < 5; i++) {
                System.out.println("子线程"+name + "运行 : " + i);
                try {
                    sleep((int) Math.random() * 10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(Thread.currentThread().getName() + " 线程运行结束!");
        }
    }
    
    public class Main {
    
        public static void main(String[] args) {
            System.out.println(Thread.currentThread().getName()+"主线程运行开始!");
            Thread1 mTh1=new Thread1("A");
            Thread1 mTh2=new Thread1("B");
            mTh1.start();
            mTh2.start();
            // main是主线程,mTh1和mTh2属于主线程的分支线程,程序运行之后,JVM会主动调用程序的Main主线程,
            // 每次运行程序,JVM都会启动一个线程(进程由多个线程组成)
            //  join方法 主线程处理完其他的事务后,需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后再结束
            /*try {             */
            /*    mTh1.join();    */
            /*    mTh2.join();*/
            /*} catch (InterruptedException e) {*/
            /*    e.printStackTrace();*/
            /*}*/
            System.out.println(Thread.currentThread().getName()+ "主线程运行结束!");
    
        }
    
    }
    

     执行结果

    main主线程运行开始!
    main主线程运行结束!
    B 线程运行开始!
    A 线程运行开始!
    子线程B运行 : 0
    子线程A运行 : 0
    子线程B运行 : 1
    子线程A运行 : 1
    子线程B运行 : 2
    子线程A运行 : 2
    子线程B运行 : 3
    子线程A运行 : 3
    子线程B运行 : 4
    子线程A运行 : 4
    B 线程运行结束!
    A 线程运行结束!

    添加mTh1.join();  mTh1.join();执行结果:

    main主线程运行开始!
    A 线程运行开始!
    B 线程运行开始!
    子线程B运行 : 0
    子线程A运行 : 0
    子线程A运行 : 1
    子线程B运行 : 1
    子线程A运行 : 2
    子线程B运行 : 2
    子线程A运行 : 3
    子线程B运行 : 3
    子线程A运行 : 4
    子线程B运行 : 4
    A 线程运行结束!
    B 线程运行结束!
    main主线程运行结束!
  • 相关阅读:
    Redis源代码分析(十三)--- redis-benchmark性能測试
    kvm中运行kvm
    umount.nfs device busy day virsh extend diskSpace, attachDisk
    ultravnc
    openNebula dubug
    maintenance ShellScripts
    virsh VMI deploy data serial xml
    cloud computing platform,virtual authentication encryption
    基于C 的libvirt 接口调用
    storage theory
  • 原文地址:https://www.cnblogs.com/Kevin00/p/7895187.html
Copyright © 2011-2022 走看看