早上主要学习了Synchronized以及公平锁和非公平锁

1、所谓的Synchronized真正的含义叫做同步。同步的内容是一个对象,表示同一时刻,只会有一个线程对目标对象进行操作,而其他线程在执行前,会查看是不是有其他线程已经同步这个对象
2、 synchronize除了底层的同步对象以外,它实现在应用层面的时候,像极了排它锁,所以我们叫他锁真正意义上的java里面被叫做lock的东西,是有独立体系的。

线程的代码实现:
main:

public class Main {public static void main(String[] args) {ReentrantLock lock = new ReentrantLock();MyThread first = new MyThread(lock);SecondThread second = new SecondThread(lock);first.start();second.start();System.out.println(lock.getQueueLength());System.out.println(lock.hasQueuedThreads());
}
}

MyThread:

package com.ma1;import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;public class MyThread extends Thread {//    Object mutex;
//
//  public MyThread(Object mutea) {//      this.mutex = mutex;
//  }ReentrantLock lock;public MyThread(ReentrantLock lock) {this.lock = lock;}@Overridepublic void run() {//      synchronized (mutex) {//
//      }//     lock.lock();
//      for(int i = 0;i<100 ;i++) {//          System.out.println(this.getName() + " : " + i);
//      }try {lock.lock();
//          if (lock.tryLock(1000, TimeUnit.MILLISECONDS)) {//
//          } else {//              System.out.println("锁失败");
//          }Thread.sleep(1000);for (int i = 0; i < 100; i++) {System.out.println(this.getName() + " : " + i);}System.out.println("hold count : " + lock.getHoldCount());} catch (InterruptedException e) {e.printStackTrace();} finally {//          if (lock.isHeldByCurrentThread() && lock.isLocked()) {//              c
//          }lock.unlock();}System.out.println("hold count : " + lock.getHoldCount());}}

SecondThread:

package com.ma1;import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;public class SecondThread extends Thread {ReentrantLock lock;public SecondThread(ReentrantLock lock) {this.lock = lock;}@Overridepublic void run() {//      lock.lock();
//      for(int i = 0;i<100 ;i++) {//          System.out.println(this.getName() + " : " + i);
//      }
//      lock.unlock();看看能否被锁住,返回一个布尔值try {//          if(lock.tryLock(1000, TimeUnit.MILLISECONDS)) {//如果等待1000毫秒没有锁上的话,那么就解锁
//              for(int i = 0; i<100; i++) {//                  System.out.println(this.getName() + " : " + i);
//              }
//              //lock.unlock();
//          } else {//              System.out.println("锁失败了");
//          }lock.lock();Thread.sleep(1000);for (int i = 0; i < 100; i++) {System.out.println(this.getName() + " : " + i);}System.out.println("Second : " + lock.getHoldCount());//看看被锁了几次} catch (Exception e) {e.printStackTrace();} finally {if (lock.isHeldByCurrentThread() && lock.isLocked()) {lock.unlock();}}}
}

对比synchronize和ReentrantLock
二者都是可重入锁。都可以实现线程之间的同步过程
1、synchronize依赖底层对象的字节码实现,也就是说,其锁状态是加载了对象的字节码上了而ReentrantLock是依赖LockUtil.park();方法来实现加锁的过程。这个过程还用到了AQS所以其上层代码较多。只有在最后的阻塞过程,才使用了底层(C++)的部分实现
2、synchronize是可以在结束的时候许,主动释放掉资源的,但是Lock不行,必须手动调用unlock方法来释放资源
3、synchronize是可以手动在执行的过程中,通过wait方法短暂释放资源的,但是lock不行(因为lock底层没有对象的)

一些练习题:

JAVA -线程四(未完)相关推荐

  1. java线程四种状态

    一个线程可以有四种状态: 1.新(new), 即线程刚刚创建,而并未执行 2.可运行(runnable),意味着一旦时间分片机制有空闲的CPU周期提供给一个线程,那个线程便可立即开始运行.因此,线程可 ...

  2. Java线程问题 看完这篇就够了

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.进程是什么? 二.线程是什么? 三.线程和进程区别是什么? 四.串行,并行,并发的区别 五.线程实现的几种方法 1.继承 ...

  3. 简述java 线程四个状态_面四个选项中,哪些是线程进入阻塞状态的原因?_学小易找答案...

    [简答题]通过继承 Thread 类的方式创建两个线程,在 Thread 构造方法中指定线程的名字,并将这两个线程的名字打印出来. [论述题]请运用所学原理解释,为什么在孩子成长的过程中,家长要不断地 ...

  4. linux安装java学习环境(未完待续)

    linux安装java学习环境 数据库连接命令 连接mysql数据库 格式为: mysql -hip地址 -p端口号 -u root -p 输入密码例如: mysql -hlocalhost -p33 ...

  5. Java并发笔记-未完待续待详解

    为什么需要并行?– 业务要求– 性能并行计算还出于业务模型的需要– 并不是为了提高系统性能,而是确实在业务上需要多个执行单元.– 比如HTTP服务器,为每一个Socket连接新建一个处理线程– 让不同 ...

  6. 剑指Offer:面试题33——把数组排成最小的数(java实现)(未完待续)

    问题描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 思路1: ...

  7. Java线程专栏文章汇总(转)

    原文:http://blog.csdn.net/ghsau/article/details/17609747 JDK5.0之前传统线程        Java线程(一):线程安全与不安全 Java线程 ...

  8. 面试题:四种Java线程池用法解析 !=!=未看

    1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? 1 2 3 4 5 6 7 8 new Thread(new Runnable() {   @Override   ...

  9. 图解 Java 线程的生命周期,看完再也不怕面试官问了

    文章首发自个人微信公众号: 小哈学Java www.exception.site/java-concur- 在 Java 初中级面试中,关于线程的生命周期可以说是常客了.本文就针对这个问题,通过图文并 ...

最新文章

  1. 洛谷P3572 [POI2014]PTA-Little Bird
  2. BCH再迎升级,真正比特币即将归来!
  3. 期末考试中微积分的证明题的分析:Taylor级数展开
  4. python selenium 三种等待方式详解
  5. 自然语言处理(四)统计机器翻译SMT
  6. SQL Server 性能调优(方法论)
  7. $Android连续按返回键两次实现退出程序
  8. 台式电脑键盘字母乱了_键盘侠的育儿经利用键盘引导学龄前儿童正确使用电脑、学习英文字母和拼音...
  9. 80-20-075-原理-Flink内存管理
  10. 嵌入式开发的职业前景分析
  11. 【C】输出乘法口诀表
  12. AcheGesture 简介(使用方法 / 中文教程)
  13. banner图/轮播图----html
  14. java写的exe程序反编译_【Jad】利用jdk自带的jad.exe实现批量反编译class文件
  15. Python第三方模块的下载与安装
  16. PyTorch1.13 亮点一览,TorchEval、MultiPy 、TorchSnapshot 新库大解读
  17. win10cmd重置系统_win10命令提示符一键还原修复系统
  18. 河南增值税开票系统原服务器地址,河南省增值税发票综合服务平台登录入口:https://fpdk.henan.chinatax.gov.cn...
  19. 51单片机流水灯三种实现方法
  20. 汽车行业如何玩转“Web3.0”?智己汽车“原石谷”开启区块链应用新场景!

热门文章

  1. hjm家族信托科技研究报告
  2. 谷歌浏览器(chrome)input标签自动填充数据的问题(已解决)
  3. 解决 AS Flutter项目目录一大片黄色警告
  4. 以太网接口芯片W5300使用说明
  5. 堆的相关操作(创建堆、插入、删除、堆排序、top-k问题)
  6. 基于JSP的毕业设计选题管理系统设计与实现
  7. Matlab论文插图绘制模板第45期—带直方图的散点图(Scatterhistogram)
  8. 有限公司税收筹划方式有哪些?企业如何享受更多税收政策?
  9. Windows下查看tcp端口占用、会话命令
  10. 51单片机学习过程中的常见疑惑