logo头像

Always believe youself.

Java多线程

本文于1184天之前发表,文中内容可能已经过时。

为什么使用多线程

有时候系统需要处理非常多的执行时间很短的请求,如果每一个请求都开启一个新的线程的话,系统就要不断的进行线程的创建和销毁,
有时候在线程的创建和销毁的时间比线程真正执行的时间还长。

而且 当线程太多的时候,系统不一定受得了。
线程池主要是为了解决一下几个问题:

  • 通过重用线程池中的线程,来减少每个线程创建和销毁的性能开销。
  • 对线程进行一些维护和管理,比如定时开始,周期执行,并发数控制等等。

sleep, yield join wait 的区别。

  • sleep() 方法需要指定等待的时间,他可以让当前执行的线程在指定的时间内暂停,进入阻塞的状态。该方法既可以让其他同优先或者高级
    优先级的线程得到执行的机会,也可以让低优先级的线程得到执行的机会,但是sleep 不会释放锁标志 ,也就是说如果有 synchronized 同步块,
    其他的线程仍然不能访问共享数据, 作用于线程。

  • 用来暂停线程的执行 将CPU 放给线程调度器

  • 静态方法, 暂停的是当前执行的线程
  • 一种是 毫秒参数 另一种是 毫秒 和纳秒两个参数
  • 与 wait 方法不同, sleep 方法不会释放锁

synchronize 修饰在方法前是什么意思

一次只能有一个线程进入该方法,其他线程要想在此时调用该方法,只能排队等待,当前线程(就是在 synchronized 方法内部的线程)
执行完该方法后,别的线程才能进入。