线程

1.什么是线程
线程是一个单独的执行流,有自己的程序执行计算器和栈。
存在的目的是令程序的指令可以并发执行。
并发执行:两个或多个指令在同一时间间隔内执行。
并发执行的程序可以充分的利用cpu资源:计算机的cpu负责完成对程序的计算任务,执行程序指定的各种指令,但程序本身由指令和数据构成,故而往往需要获取其他的资源后才能配合cpu执行计算任务。
例如:网络IO请求,在等待网络数据获取完毕之前,cpu处于空闲状态,如果程序是顺序执行,此时cpu资源就被浪费了,如果程序是并发执行就可以先执行其他线程了。

2.在java中创建线程
在java中可通过两种方式创建线程。
(1)继承Thread类

public class HelloThread extends Thread {
    @Override
    public void run(){
        try {
            Thread.sleep(500);
            System.out.println("hello");
        }catch (Exception e){
            e.printStackTrace();
        }

    }
    public static void main(String[] args) {
        HelloThread helloThread = new HelloThread();
        helloThread.start();
    }
//输出:
main
hello
}

对调用了start()方法的线程类程序将启动一个新的线程,与当前存在的线程并发执行。
按顺序执行方式,输出应该是:
hello
main
因为两个线程并发执行run内的语句在输出前等待了0.5秒,所以main比hello更快输出。
ps:只有线程类调用的start()方法才会创建一个新的线程,直接执行run与直接调用普通的方法无异。

(2)实现Runnable接口
如果需要并发执行的类已经继承的其他类,就无法再继承Thread类,此时可以通过实现Runnable接口实现创建线程。

public class HelloRunnable implements Runnable {
    @Override
    public void run() {
        try {
            Thread.sleep(500);
            System.out.println("hello");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    
    public static void main(String[] args) {
        Thread thread = new Thread(new HelloRunnable());
        thread.start();
        System.out.println("main");
    }
}

ps:一般来说,为减少创建和销毁线程所花费的开销和内存资源浪费,不会自行显式(new一个对象)创建一个线程,而是通过线程池来管理。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。