进程和线程的区别?
进程是资源分配的最小单位,而线程是CPU调度的最小单位。
- 所有与进程相关的资源,都被记录在PCB中
- 进程是抢占处理机调度单位;线程的属于某个进程,共享其资源
总结:
- 线程不能看作独立的应用,而进程可以看作独立应用
- 进程有独立的地址空间,相互不影响,线程只是进程的不同执行路径
- 线程没有独立的地址空间,多进程的程序比多线程健壮
- 进程的切换比线程的切换开销大
进程和线程的关系
- Java对操作系统提供的功能进行封装,包括线程和进程
- 运行一个程序会产生一个进程,进程包含至少一个线程
- 每个进程对应一个JVM实例,多个线程共享JVM堆
- Java采用单线程编程模式,程序会自动创建主线程
- 主线程可以创建子线程,原则上要后于子线程完成执行
Thread中的start和run方法区别
Thread和Runnable关系
- Thread是实现了Runable接口的类,使得run支持多线程
- 因Java类得单一继承原则,推荐多使用Runnable接口
如何处理线程的返回值?
- 主线程等待法
- 使用Thread类得join()阻塞当前线程以等待子线程处理完毕
- 通过Callable接口实现:通过FutureTask 或者线程池获取
sleep和wait区别。
- sleep是Thread类的方法,wait是Object类中定义的方法
- sleep()方法可以在任何地方使用
- wait()方法只能在synchronized方法或者synchronized块中使用
- Thread.sleep只会让出CPU,不会释放锁
- Object.wait既会让出CPU,也会释放锁
如何中断线程
- 通过调用interrupt(),通知线程中断:
- 如果线程处于被阻塞状态,那么线程将立即退出被阻塞状态,并抛出一个InterruptedException异常。
- 如果线程处于正常活动状态,那么会将该线程的中断标志设为true。被设置中断标志的线程将继续正常运行,不受影响。
CAS(Compare and Swap)
是一种实现高效实现线程安全性的啊方法,支持源自更新操作,适用于计数器序列发生器等场景;属于乐观锁机制,号称lock-free;CAS操作失败时由开发者决定是继续尝试,还是执行别的操作。
- 包含三个操作数:内存位置v,预期原值A,新值B
网友评论