进程与线程

阅读量: 1004 编辑

Java创建线程的方法

1、通过继承 Thread 类来创建一个线程

2、通过实现 Runnable 接口来创建一个线程

一、继承Thread类

1、继承Thread类后,必须重写run()方法

2、语法格式

public ClassName extends Thread{
	run(){}
}

3、Thread的构造器参考

  • Thread()

  • Thread(String name) //指定线程的名称

  • Thread(Runnable target) //包装Runnable接口

  • Thread(Runnable target, String name)

  • Thread(ThreadGroup group, Runnable target)

  • Thread(ThreadGroup group, String name)

4、编程实战

文件:ThreadDemo.java

//线程类
class MyThread extends Thread{

    @Override
    public void run() {
        System.out.println("我是一个线程");
        super.run();
    }
}

public class ThreadDemo {

    public static void main(String[] args) {
        //创建一个线程实例
        MyThread t = new MyThread();
        //线程的启动使用 start 方法
        t.start();
    }
}
  • 使用 start() 方法启动线程,线程会进入 Runnable(可运行) 状态,它将向线程调度器注册这个线程,等待CPU资源;

  • 不要直接在程序中调用线程的 run() 方法

二、实现Runnable接口来创建一个线程

1、实现Runnable接口,实现 run() 方法

2、Runnable接口没有start()方法,必须用Thread包装才可以启动

3、编程实战

class MyRunnable implements Runnable{
    @Override
    public void run() {
        System.out.println("实现Runnable接口的线程");
    }
}

public class ThreadDemo {

    public static void main(String[] args) {
        MyRunnable r = new MyRunnable();

        // Runnable接口没有start()方法,必须用Thread包装才可以启动
        // t.start(); //报错

        new Thread(r).start(); //创建一个线程实例
    }
}
  • Runnable不能直接start()

  • 参考上方Thread的构造器

三、两种线程创建方式的比较

1、使用Runnable接口

  • 可以将代码和数据分开,形成清晰的模型

  • 还可以从其他类继承

  • 保持程序风格的一致性

2、直接继承Thread类

  • 不能再从其他类继承

  • 编写简单,可以直接操纵线程

四、多线程和单线程

如果不创建Thread,那么我们这个程序(进程)就只有一个线程(main),也就是单线程的;

如果创建了Thread,那么这个程序(进程)就是多线程的;

可以尝试多创建几个线程,并加上打印当前线程的名称,看一看效果,在 main 方法中:

new Thread(r, "线程-A").start();//创建一个线程
new Thread(r, "线程-B").start();//创建一个线程

System.out.println(Thread.currentThread().getName());//打印当前线程的名称

run 方法中:

System.out.println(Thread.currentThread().getName());//打印当前线程的名称

主线程main的线程名称会先打印出来,因为当前线程正在 run ,而 A 和 B 只是 start 了,进入了 Runnable(可运行状态),当获取CPU资源的时候,才会 run(执行),至于先执行 A 还是先执行 B,是不确定的。

爱码岛编程公众号
试卷资料
爱码岛编程小程序
在线刷题
苏ICP备13052010号
©2023 南京匠成信息科技有限公司