这里先不讲juc包里的多线程类。juc相关内容会在Java并发专题讲解。
-
线程的实现可以通过继承Thread类和实现Runable接口 也可以使用线程池。callable配合future可以实现线程中的数据获取。
-
Java中的线程有7种状态,new runable running blocked waiting timewaiting terminate
blocked是线程等待其他线程锁释放。waiting是wait以后线程无限等待其他线程使用notify唤醒 timewating是有限时间地等待被唤醒,也可能是sleep固定时间。
-
Thread的join是实例方法,比如a.join(b),则说明a线程要等b线程运行完才会运行。
-
o.wait方法会让持有该对象o的线程释放锁并且进入阻塞状态,notify则是持有o锁对象的线程通知其他等待锁的线程获取锁。notify方法并不会释放锁。注意这两个方法都只能在synchronized同步方法或同步块里使用。
-
synchronized方法底层使用系统调用的mutex锁,开销较大,jvm会为每个锁对象维护一个等待队列,让等待该对象锁的线程在这个队列中等待。当线程获取不到锁时则让线程阻塞,而其他检查notify以后则会通知任意一个线程,所以这个锁时非公平锁。
-
Thread.sleep(),Thread.interrupt()等方法都是类方法,表示当前调用该方法的线程的操作。
一个线程实例连续start两次会抛异常,这是因为线程start后会设置标识,如果再次start则判断为错误。
本文深入探讨Java中的线程实现,包括继承Thread类、实现Runnable接口以及使用线程池。讲解了Callable和Future在获取线程数据中的应用,并详细阐述了线程的七种状态,如blocked、waiting和timed_wainting。同时,介绍了join方法、wait与notify方法的使用,以及synchronized关键字的内部机制。此外,还提及了Thread.sleep()和interrupt()等线程操作方法。

被折叠的 条评论
为什么被折叠?



