线程和进程——入门

什么是进程,什么是线程?

进程:进程是程序的一次执行,是系统进行资源分配和调度的独立单位。每个进程都有它本身的内存空间和系统资源。
线程:是进程的一个执行单元,是进程内科调度实体,比进程更小的独立运行的基本单位。一个进程在其执行的过程当中能够产生多个线程,与进程不一样的是同类的多个线程共享进程的堆和方法区资源,但每一个线程有本身的程序计数器、虚拟机栈和本地方法栈,因此系统在产生一个线程,或是在各个线程之间做切换工做时,负担要比进程小得多,所以线程也被称为轻量级进程。
一个程序至少一个进程,一个进程至少一个线程。java

clipboard.png

进程线程的区别

  1. 地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。
  2. 资源拥有:同一进程内的线程共享本进程的资源,可是进程之间的资源是独立的。
  3. 一个进程崩溃后,在保护模式下不会对其余进程产生影响,可是一个线程崩溃整个进程都死掉。因此多进程要比多线程健壮。
  4. 进程切换时,消耗的资源大,效率高。因此涉及到频繁的切换时,使用线程要好于进程。一样若是要求同时进行而且又要共享某些变量的并发操做,只能用线程不能用进程。
  5. 执行过程:每一个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。可是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
  6. 线程是处理器调度的基本单位,可是进程不是。
  7. 进程是并行的,线程是并发的

并行与并发

  • 并行:
    并行性是指同一时刻内发生两个或多个事件,是在不一样实体上的多个事件
  • 并发:

并发性是指同一时间间隔内发生两个或多个事件,是在同一实体上的多个事件git

Java实现多线程

  • 继承Thread,重写run方法github

    public class MyThread extends Thread {
        @Override
        public void run() {
            for (int x = 0; x < 200; x++) {
                System.out.println(x);
            }
        }
    
    }
    public class MyThreadDemo {
        public static void main(String[] args) {
            // 建立两个线程对象
            MyThread my1 = new MyThread();
            MyThread my2 = new MyThread();
    
            my1.start();
            my2.start();
        }
    }
  • 实现Runnable接口,重写run方法多线程

    public class MyRunnable implements Runnable {
    
        @Override
        public void run() {
            for (int x = 0; x < 100; x++) {
                System.out.println(x);
            }
        }
    
    }
    public class MyRunnableDemo {
        public static void main(String[] args) {
            // 建立MyRunnable类的对象
            MyRunnable my = new MyRunnable();
    
            Thread t1 = new Thread(my);
            Thread t2 = new Thread(my);
    
            t1.start();
            t2.start();
        }
    }

通常使用实现Runnable接口并发

jvm虚拟机的启动是单线程的仍是多线程的?

是多线程的。不单单是启动main线程,还至少会启动垃圾回收线程的jvm

并发基础笔试题

这是github上一位大佬整理的,我的以为很棒
并发基础笔试题ide

相关文章
相关标签/搜索