Java线程
来源:互联网 发布:阿里云域名购买 编辑:程序博客网 时间:2024/06/06 20:01
继承自Thread方法
thread.run()
和thread的start()方法
必须是start,
如果是run()的话,那么就是普通的方法调用。
如果是调用thread的run(),那么就是普通的方法调用,不会创建新线程。
继承自runnable方法
new Thread(传入runnable对象,名字):这样就产生一个线程
Synchronized
public function get(){}thread1.run(){ get();}thread2.run(){ get();}当一个线程获取了对应锁,并执行该代码块时,其他线程便只能一直等待,等待获取锁的线程释放锁,而这里获取锁的线程释放锁只有2种情况
用法
synchronized()
public class MySynchronized{ public static void main(String[] args){ final MySynchronized mySynchronized=new MySynchronized(); final MySynchronized mySynchronized2=new MySynchronized(); new Thread("thread1"){ public void run(){ synchronized(mySynchronized){ try{ System.out.println(this.getName()+"start"); Thread.sleep(5000); System.out.println(this.getName()+"醒了"); System.out.println(this.getName()+"end"); }catch(InterruptdException e){ e.printStackTrace(); } }.start(); new Thread("thread2"){ public void run(){ synchronized(mySynchronized){ try{ System.out.println(this.getName()+"start"); Thread.sleep(5000); System.out.println(this.getName()+"醒了"); System.out.println(this.getName()+"end"); }catch(InterruptdException e){ e.printStackTrace(); } }.start(); } } }}
缺点:
但是Sychrnoized不会解决线程之间读的问题,即时多个线程读写也会被堵塞。
LOCK实现
Lock是一个类,不是java关键字。Concurrent包中的对象。
Synchronized不需要用户自己释放锁,Lock必须手动释放锁。
java.util.concurrent.Lock:
Lock是一个接口。
public interface Lock(){ void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean tryLock(longtime,TimeUnit unit )throwsInterruptedException; void unlock();}//其中lock() tryLock() tryLock(long time,TimeUnit unit) lockInterruptibly()是用来获取锁的unlock()是用来释放锁的
lockInterruptibly
通过这个方式获取锁的话,如果线程正在等待获取锁,安么这个线程能够响应中断,即中断线程的等待状态。也就是说,当2个线程同时通过lock.lockInterruptibly()想获取锁,如果线程A获取到了锁,线程B只有等待,那么线程B调用threadB.Interrupt()能够中断线程B的等待过程。
当一个线程获取到了锁之后,是不会被interrupt方法打断的。
当通过lockInterruptibly()方法 获取到某个锁,如果获取不到,只有进行等待的情况下,是可以被打断的
而用synchronized()如果处于等待状态,是无法被中断的,只有一直等待下去。
tryLock()方法是有返回值的,表示尝试获取锁,获取成功返回true,失败返回false。
阅读全文
0 0
- Java线程:什么是线程
- Java线程:线程池
- java线程--线程退出
- JAVA-线程/线程锁
- Java线程:什么是线程
- Java线程:线程中断
- Java线程:线程状态
- Java线程: 线程调度
- Java线程:线程交互
- java--线程--线程池
- java 线程
- Java线程
- java线程
- java线程
- Java线程
- Java线程
- java线程
- JAVA 线程
- Top 5 Crashes on Android App
- AngualrJS Ioc控制反转提供器入门
- Tips:几个有用的android shell svc命令
- 从零开始做一个有后端,有短信验证,mvp架构,真正的登录注册小项目(一)
- eclipse中web项目的三处地方的JDK版本都必须保持一致
- Java线程
- webService快速入门入门系列《4》----cfx框架之系统拦截器
- Nginx详细安装部署教程
- ubuntu17.10 idea 导入项目,maven依赖导入失败问题
- struts2的页面语言切换
- 统计学基础知识(导航页)
- tensorflow实现基本的回归
- source insight4.0支持添加*.cc及解析*.cc文件
- CMS垃圾收集器