美文网首页
Java线程

Java线程

作者: DaemonXiao | 来源:发表于2019-03-08 16:31 被阅读0次

进程和线程的区别?

进程是资源分配的最小单位,而线程是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(),通知线程中断:
  1. 如果线程处于被阻塞状态,那么线程将立即退出被阻塞状态,并抛出一个InterruptedException异常。
  2. 如果线程处于正常活动状态,那么会将该线程的中断标志设为true。被设置中断标志的线程将继续正常运行,不受影响。

CAS(Compare and Swap)

是一种实现高效实现线程安全性的啊方法,支持源自更新操作,适用于计数器序列发生器等场景;属于乐观锁机制,号称lock-free;CAS操作失败时由开发者决定是继续尝试,还是执行别的操作。

  • 包含三个操作数:内存位置v,预期原值A,新值B

相关文章

网友评论

      本文标题:Java线程

      本文链接:https://www.haomeiwen.com/subject/oymrpqtx.html