只需要继承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实现外,还有
ArrayBlockingQueue :基于数组实现的BlockingQueue队列。LinkedBlockingQueue:基于链表实现的BlockingQueue队列。PriorityBlockingQueue:优先队列SynchronousQueue:存和取必须严格交替