JAVA 多线程
进程和线程的区别?
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.
--------------------------------
多线程的两种实现方式有什么区别?
1、继承Thread类
1) 定义子类继承Thread类。
2) 子类中重写Thread类中的run方法。
3) 创建Thread子类对象,即创建了线程对象。
4) 调用线程对象start方法:启动线程,调用run方法
2. 实现Runnable接口
1)定义子类,实现Runnable接口。
2)子类中重写Runnable接口中的run方法。
3)通过Thread类含参构造器创建线程对象。
4)将Runnable接口的子类对象作为实际参数传递给Thread类的构造方法中。
5)调用Thread类的start方法:开启线程,调用Runnable子类接口的run方法。
-------------------------------------
简述线程的生命周期。
要想实现多线程,必须在主线程中创建新的线程对象。Java语言使用Thread类及其子
类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下的五种状态:
1、新建: 当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态
2、就绪:处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它已具备了运行
的条件
3、运行:当就绪的线程被调度并获得处理器资源时,便进入运行状态, run()方法定义了线程的操
作和功能
4、阻塞:在某种特殊情况下,被人为挂起或执行输入输出操作时,让出 CPU 并临时中止自己的执
行,进入阻塞状态
5、死亡:线程完成了它的全部工作或线程被提前强制性地中止
------------------------------------
什么是并发?如何避免并发?
并发是指多个进程或线程同时(或着说在同一段时间内)访问同一资源会产生并发问题。
为了避免并发引入了对象互斥锁的概念,来保证共享数据操作的完整性。
1、每个对象都对应于一个可称为“互斥锁”的标记,这个标记用来保证
在任一时刻,只能有一个线程访问该对象。
2、关键字synchronized 来与对象的互斥锁联系。当某个对象用
synchronized修饰时,表明该对象在任一时刻只能由一个线程访问。
3、同步的局限性:导致程序的执行效率要降低
4、同步方法(非静态的)的锁为this。
5、同步方法(静态的)的锁为当前类本身