Java多线程

人盡茶涼 提交于 2020-01-13 00:48:13

1.多线程

Thread类是Java中一个非常重要的类,它是Java多线程的基础,其他多线程如Runnable…都依赖于Thread。想要实现多线程,就必须让对象extends Thread类或者implements Runnable接口,并且复写run方法,在run方法体中完成对于业务逻辑的调用。在主线程中通过调用多线程对象的start()方法完成多线程。

2.线程的声明周期

线程的生命周期

3.Java中的多线程线程同步工具

1>synchronized关键词

非常简单粗暴的实现,只要对于某一个对象或者摸个静态方法前加上synchronized关键字,当线程调用对象或者方法时,它就会拥有这个对象的锁,其他对象无法使用对象或者调用方法,实际实践中,被当成锁的对象在方法体中最好不要进行其他操作,以免对于该对象的锁失去意义。

2>锁和可重入锁

普通锁的调用如下:

synchronized(lock) //获得对锁的占有
			{
			lock.wait(); //暂时释放对锁的占有,这是其他对象通过竞争获得锁,并执行自己的方法,然后归还锁。
			doSometing;
			lock.notify(); //方法调用结束,释放对锁的占有
			}

可重入锁的调用如下:

lock.lock() //获得对锁的占有
Contional.await(); //暂时释放对锁的占有,并且定向的将锁过渡给指定对象
Contional.signal(); //释放对锁的占有,并定向的将锁

在调用await()和signal()方法的时候,锁对象被释放,调用结束锁对象又被锁住。也就是说可重入锁,也就是递归锁在调用时被锁住,在调用结束之后被释放。

3>LinkBlockingDeque

使用LinkBlockingDeque时,通常有两个队列,一个是任务队列,一个是消息队列,两个队列都使用put()和take()方法,任务队列进行任务的生产和消费,消息队列用来处理同步问题。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!