java多线程小记

并行:两个或者多个事件在 同一时间点发生。比如:在同一时间点,一个人在扫地,一个人在刷碗。不涉及资源抢占
(如果两个人在同一时间点同一个刷碗池使用一套刷碗工具刷碗,这涉及到抢占刷碗工具资源,一个人占用刷碗工具,另一个人只能等待刷碗工具,这是并发)
 
并发(串行):两个或者多个事件在 一个时间段内发生。比如:一个人一边煮饭,一边炒菜,精确到某一个时间点,只专注于干一件事,多个事之间是交替来执行的。
 
进程:一个内存中运行的应用程序,比如:电脑上运行QQ,一个QQ程序就是一个进程,开多个QQ程序就是多个进程。每个进程都有一个独立的内存空间,进程中的数据存储空间是独立的( 堆空间和栈空间)。进程是系统运行应用程序的基本单位。  一个进程至少有一个线程(主线程)。而java程序里一个进程至少有两个线程(主线程,GC线程)
 
线程:进程内部的一个独立执行单元。进程相当于一个单核CPU的操作系统,线程相当于这个操作系统里的多个任务。堆空间是共享的,栈空间是独立的。消耗的资源比进程小的多。
 
多线程优势:
1、进程之间不能共享内存,线程之间可以共享内存。
2、系统创建进程需要为该进程重新分配系统资源,而创建线程的代价要小得多,开销要小很多。所以在开发多任务运行时,通常先考虑创建多线程,而不是多进程。
3、java本身支持多线程的开发。
 
进程创建:
1、Runtime.exec()
2、ProcessBuilder.start();
线程创建:
1、继承Thread类。
    1、定义一个线程类 A 继承于 java.lang.Thread 类
    2、在 A 类中覆盖 Thread 类的 run() 方法
    3、在 run() 方法中编写需要执行的操作
    4、在 main 方法(线程)中,创建线程对象,并启动线程
        创建线程类:A类 a = new A()类;
        调用 start() 方法启动线程:a.start();
2、实现Runnable接口
    1、定义一个线程类 A 实现于 java.lang.Runnable 接口(注意:A类不是线程类,没有 start()方法,不能直接 new A 的实例启动线程)
    2、在 A 类中覆盖 Runnable 接口的 run() 方法
    3、在 run() 方法中编写需要执行的操作
    4、在 main 方法(线程)中,创建线程对象,并启动线程
        创建线程类:Thread t = new Thread( new A类() ) ;
        调用 start() 方法启动线程:t.start();
3、使用匿名内部类创建线程
                   
new Thread(new Runalbe() {
                    @Override
                    public void run() {
                        for (int i = 0; i < 10; i++) {
                            System.out.println("播放音乐" + i);
                        }
                    }

                }).start();

猜你喜欢

转载自www.cnblogs.com/zcz527/p/9556044.html