zoukankan      html  css  js  c++  java
  • 多线程:Thread类和Runnable接口

    创建新执行线程的两种方法:

    1.将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。创建对象,开启线程。run方法相当于其他线程的main方法。  

    public class MyThread extends Thread{
    public void run() {
    for(int i=0;i<100;i++) {
    System.out.println(Thread.currentThread().getName() + ":" + i);
    }
    }
    }
    public class Demo01 {
    public static void main(String[] args) {
    MyThread mt=new MyThread();
    mt.start();
    for(int i=0;i<100;i++){
    System.out.println(Thread.currentThread().getName()+":"+i);
    }
    }
    }

    2.声明一个实现 Runnable 接口的类。该类然后实现 run 方法。然后创建Runnable的子类对象,传入到某个线程的构造方法中开启线程。
    public class MyRunnable implements Runnable {
    public void run() {
    for (int i=0;i<100;i++){
    System.out.println(Thread.currentThread().getName()+":"+i);
    }
    }
    }
    public class Demo02 {
    public static void main(String[] args) {
    MyRunnable mr=new MyRunnable();
    Thread th=new Thread(mr);
    th.start();
    for (int i=0;i<100;i++){
    System.out.println(Thread.currentThread().getName()+":"+i);
    }
    }
    }
    
    

    多线程执行时,在栈内存中,其实每一个执行线程都有一片自己所属的栈内存空间。进行方法的压栈和弹栈。

    
    

     

    
    

    当执行线程的任务结束了,线程自动在栈内存中释放了。但是当所有的执行线程都结束了,那么进程就结束了。

    第二种方式实现Runnable接口避免了单继承的局限性,所以较为常用。实现Runnable接口的方式,更加的符合面向对象,线程分为两部分,一部分线程对象,一部分线程任务。继承Thread类,线程对象和线程任务耦合在一起。一旦创建Thread类的子类对象,既是线程对象,有又有线程任务。实现runnable接口,将线程任务单独分离出来封装成对象,类型就是Runnable接口类型。Runnable接口对线程对象和线程任务进行解耦。

     
  • 相关阅读:
    安全测试的概述和用例设计
    性能测试(四)常见调优
    性能测试(三)常见的性能测试缺陷
    Jmeter(七)六种参数化的方式
    Jmeter(六)所有的断言
    接口测试的问题解答
    ES学习
    flutter 之BottomNavigationBar属性
    flutter StaggeredGridView.countBuilder 上方取消空白
    flutter升级、回退到指定版本---mac版
  • 原文地址:https://www.cnblogs.com/nbkls/p/12772241.html
Copyright © 2011-2022 走看看