zoukankan      html  css  js  c++  java
  • 初识java 多线程

     1 //方法一:利用extends Thread方式创建线程
     2 //要点1:重写Thread中的run方法
     3 //要点2:用start方法启动
     4 public class basic extends Thread {
     5     public basic(String name){
     6         super(name);
     7     }
     8     public void run(){
     9         for(int i= 0; i<5; i++)
    10         {        try {
    11             sleep(5);//睡5毫秒,便于其他线程抢到时间片
    12         } catch (InterruptedException e) {
    13             e.printStackTrace();
    14         }
    15                 System.out.print(this.getName()+":"+i+"
    ");
    16             
    17         }
    18     }
    19     public static void main(String[] args){
    20         Thread t1 = new basic("张三");  //t1对象中的name为张三     Thread向下转型
    21         Thread t2 = new basic("李四");  //t2对象中的name为李四
    22         t1.start();
    23         t2.start();
    24     }
    25 }

    执行结果:

    (一)

    张三:0
    李四:0
    李四:1
    张三:1
    张三:2
    李四:2
    李四:3
    张三:3
    李四:4
    张三:4

    (二)

    张三:0
    李四:0
    李四:1
    张三:1
    李四:2
    张三:2
    张三:3
    李四:3
    张三:4
    李四:4      执行结果不一样

    总结 :用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。

    run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。

    把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法,这是由jvm的内存机制规定的。并且run()方法必须是public访问权限,返回值类型为void。

     1 //方法二:声明实现Runnable接口的类
     2 //要点1:定义run方法
     3 //要点2:用start方法启动
     4 //要点3:实现Runable的类实例作为Thread构造函数的参数
     5 public class basic implements Runnable {
     6     private String name;
     7     public basic(String name){
     8         this.name = name;
     9     }
    10     public void run(){
    11         for(int i= 0; i<5; i++)
    12         {    
    13             System.out.println(name+":"+i);
    14         }
    15     }
    16     public static void main(String[] args){
    17         basic b1 = new basic("张三");
    18         basic b2 = new basic("李四");
    19         Thread t1 = new Thread(b1); // public Thread(Runnable target)
    20         Thread t2 = new Thread(b2); // Thread类也实现了Runnable接口
    21         t1.start();
    22         t2.start();
    23     }
    24 }

    运行结果一

    张三:0
    李四:0
    李四:1
    李四:2
    李四:3
    李四:4
    张三:1
    张三:2
    张三:3
    张三:4

    运行结果二

    张三:0
    李四:0
    张三:1
    张三:2
    张三:3
    张三:4
    李四:1
    李四:2
    李四:3
    李四:4

  • 相关阅读:
    关于可控进程数的PHP多进程以及信号控制
    编译安装PHP遇到的问题
    MySQL数据的导入导出
    关于svn的dump和load命令
    Nginx多域名的泛解析
    kafka
    JavaScript
    失误与经验
    Hadoop
    Storm
  • 原文地址:https://www.cnblogs.com/hxjbc/p/5166818.html
Copyright © 2011-2022 走看看