zoukankan      html  css  js  c++  java
  • 创建线程的方法 Thread Runnable

    一:使用Theard的公共静态方法直接生成并控制,如下:

    public class currentThread{
       public static void main(String args[]){
           Threadthread = Thread.currentThread();
          System.out.println("线程名称是:"+thread.getName());
          System.out.println("线程的优先级是:"+thread.getPriority());
          thread.setName("thread one");
          System.out.println("线程现在的名字是:" +thread.getName());
          thread.setPriority(1);
          System.out.println("线程现在的优先级是:" +thread.getPriority());
          
           try{
              for (int i =0; i < 5; i++) {
                System.out.println(i);
                thread.sleep(1000);
             }
           } catch(Exception e) {
              // TODO:handle exception
          }
       }
    }
    




    二:工程中最常用的方法,接口Runnable,如下:


    public class newThreadimplements Runnable{
    //使用Runnable定义的子类中没有start()方法,只有Thread类中才有。此时观察Thread类,有一个构造方法:publicThread(Runnable targer)
    //此构造方法接受Runnable的子类实例,也就是说可以通过Thread类来启动Runnable实现的多线程。start()可以协调系统的资源;
       
       
    //   newThread(){
    //       Threadthread = new Thread(this,"t_1");//直接重新命名
    //      System.out.println(thread);
    //      thread.start();
    //   }
       
       
       newThread(String name){
          
       };
       
       //在正式方法中直接用newThread mt1=new newThread("线程1")就可以了
       static newThread mt1=new newThread("线程1");
       
       
       @Override
       public void run() {
           // TODOAuto-generated method stub
    
       }
       
       public static void main(String args[]){
          
           //newnewThread();
          
          
           newThread(mt1).start();
          
           try{
              for (int i =0; i < 10; i++) {
                System.out.println(i);
                Thread.sleep(1000);
             }
           } catch(Exception e) {
              // TODO:handle exception
          }
          
       }
    
    }
    



    三:Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限,下面看例子:

    class MyThread extends Thread{
        privateString name;
        publicMyThread(String name) {
           super();
           this.name = name;
        }
        public voidrun(){
           for(int i=0;i<10;i++){
              System.out.println("线程开始:"+this.name+",i="+i);
           }
        }
    }
    
    package org.thread.demo;
        public classThreadDemo01 {
          public static void main(String[] args) {
               MyThread mt1=new MyThread("线程a");
              MyThread mt2=new MyThread("线程b");
               mt1.run();
               mt2.run();
        }
    }




    但是,此时结果很有规律,先第一个对象执行,然后第二个对象执行,并没有相互运行。在JDK的文档中可以发现,一旦调用start()方法,则会通过JVM找到run()方法。下面启动
    start()方法启动线程:


    package org.thread.demo;
    public class ThreadDemo01 {
        publicstatic void main(String[] args) {
           MyThread mt1=new MyThread("线程a");
           MyThread mt2=new MyThread("线程b");
           mt1.start();
           mt2.start();
        }
    };



    这样程序可以正常完成交互式运行。那么为啥非要使用start();方法启动多线程呢?
    在JDK的安装路径下,src.zip是全部的java源程序,通过此代码找到Thread中的start()方法的定义,可以发现此方法中使用了private native voidstart0();其中native关键字表示可以调用操作系统的底层函数,那么这样的技术成为JNI技术(java NativeInterface)
  • 相关阅读:
    nikto web server 扫描工具
    crowdsec开源安全引擎
    windows strace 类似的工具
    禁用spring boot 暴露的几个产品可用的endppint 服务
    nginx proxy minio 默认页配置(三)
    nginx proxy minio 默认页配置(二)
    nginx proxy minio 默认页配置
    flamescope + chrome cpu profile 分析web 性能
    golang noCopy 的功能
    golang 死锁&&静态检查的一些工具
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6314397.html
Copyright © 2011-2022 走看看