线程简单知识点

1、线程和进程区别?

  • 进程:资源分配的基本单位;一个进程中至少有一个线程,可以有多个线程。
  • 线程:程序执行的基本单位;一个线程只属于一个进程。

2、创建线程的方法?

        2.1、继承Thread类,重写run()方法     特点:java单继承,不灵活,不推荐使用。

        2.2、实现Runable接口,重写run()方法;

        2.3、实现Callable接口,重写call()方法;

3、线程的几种状态

        3.1、创建(new)状态  执行了new Thread(); 创建完成后就需要为线程分配内存;

        3.2、就绪(runnable)状态: 调用了start()方法, 等待CPU进行调度 ​

        3.3、运行(running)状态: 执行run()方法 ​

        3.4、阻塞(blocked)状态: 暂时停止执行线程,将线程挂起( sleep()、wait()、join(),

        没有获取到锁都会使线程阻塞), 可能将资源交给其它线程使用。 ​

        3.5、死亡(terminated)状态: 线程销毁(正常执行完毕、发生异常

        或者被打断interrupt()都会导致线程终止)

线程简单知识点_第1张图片

 

注:

        wait(): 导致线程进入等待阻塞状态,仅会释放当前锁,

        会一直等待直到它被其他线程通过notify()或者notifyAll()唤醒。

        notify(): 该方法只能在同步方法或同步块内部调用, 随机选择一个;

        notifyAll(): 唤醒所有的wait()对象。

4、池技术的主要思想:

        为了减少每次获取资源的消耗,提高对资源的利用率。

        使用线程池的好处:1、降低资源消耗

                                        2、提高响应速度

                                        3、提高线程的可管理性

        线程池参数:

        corePoolsize 核心线程数 也就是正常情况下创建工作的线程数,这些线程创建后并不会消除,而是一种常驻线程。

        maxinumPoolsize 最大线程数 当任务比较多时,核心线程数用完时,还无法满足时,此时创建新的线程,但线程内的线程数不会超过最大线程数。

        workQueue 用来存放执行任务的

        ThreadFactory 实际上是一个线程工厂,用来生产线程执行任务的。

5、对线程安全的理解?

        不是线程安全、应该是内存安全,堆是共享内存,可以被所有线程访问。

        堆:是进程和线程共有的空间,分全局堆和局部堆。全局堆就是所有没有被分配的空间,局部堆就是用户分配的空间。堆在操作系统对进程初始化的时候分配,运行过程中可以向系统要额外堆,但是用完要还给操作系统,要不然就是内存泄露。

        栈:是每个线程独有的,保存其运行状态和局部自动变量。栈在线程开始的时候初始化,每个线程的相互独立,因此栈是线程安全的。操作系统在切换线程的时候自动切换栈。栈空间不需要在高级语言里面显式的分配和释放。

你可能感兴趣的:(知识点整理,java)