创建线程和启动

只需要继承Thread类,并重写该类的run()方法;

外部只需要执行它的start方法就能让它跑起来

结束线程只能通过run方法结束实现,利用其他方法是不安全的

后台(守护)线程

(在start之前)调用setDaemon(boolean on) 设置为守护线程,

线程间通信

1. 锁与同步

锁的实现是基于对象的,所以又经常称它为对象锁

实现方式就是用synchronized (lock) {}包裹代码即可,其中lock是任意的一个Object

对于生产者消费者模型可以使用**BlockingQueue。**当生产者线程试图向BlockingQueue中放入元素时,如果该队列已满,则线程被阻塞;但消费者线程试图从BlockingQueue中取出元素时,如果队列已空,则该线程阻塞。

BlockingQueue提供如下两个支持阻塞的方法:

**(1)put(E e):**尝试把Eu元素放如BlockingQueue中,如果该队列的元素已满,则阻塞该线程。

**(2)take():**尝试从BlockingQueue的头部取出元素,如果该队列的元素已空,则阻塞该线程。

BlockingQueue<String> b=new ArrayBlockingQueue<>(1);

其中1是队列长度,除了ArrayBlockingQueue实现外,还有