按我的理解,当一个线程需要获取的锁被另一个线程占用时,将进入阻塞态。但实际好像不是这样的,下面是我的代码。

在run方法中会调用MyBlock的isBlocked方法,该方法添加了synchronized限定。

在main方法中创建两个线程:t1和t2,t1运行后,由于isBlocked方法运行需要一定时间,t2应该进入阻塞态。但我调用getState方法得到的是Runnable,不是Blocked。

这是为啥呢?

public class TestThread implements Runnable {

private String mThreadName = null;

private MyLock mLock = null;

public TestThread(String name, MyLock l){

mThreadName = name;

mLock = l;

}

@Override

public void run() {

// TODO Auto-generated method stub

subTask();

}

private void subTask()

{

System.out.println(mThreadName + "START!");

mLock.isLocked();

System.out.println(mThreadName + "END!");

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

MyLock lock = new MyLock();

TestThread r1 = new TestThread("A", lock);

Thread t1 = new Thread(r1);

t1.start();

TestThread r2 = new TestThread("B", lock);

Thread t2 = new Thread(r2);

t2.start();

System.out.println(t2.getState());

//t2.interrupt();

System.out.println(t2.getState());

System.out.println("MAIN END!");

}

public static class MyLock{

private ReentrantLock mLock = new ReentrantLock();

public synchronized void isLocked(){

System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@");

for (int i = 0; i

System.out.print("," + i);

}

System.out.println("#############################");

}

}

}

java如何让线程阻塞_Java中如何使一个线程进入阻塞态?相关推荐

  1. java判断线程结束_java中如何判断一个线程是否结束

    我们可以通过调用thread.Join()方法,把要判断的线程加入到当前线程中,这样可以将两个交替执行的线程合并为顺序执行的线程.如果顺利执行,则说明该线程未结束. (视频教程推荐:java视频) 比 ...

  2. java构造单例线程池_java中常见的六种线程池详解

    之前我们介绍了线程池的四种拒绝策略,了解了线程池参数的含义,那么今天我们来聊聊Java 中常见的几种线程池,以及在jdk7 加入的 ForkJoin 新型线程池 首先我们列出Java 中的六种线程池如 ...

  3. java 多个监听_java中监听一个客户端怎么做?监听多个怎么做?

    随着时代的不断进步与发展,人们对于科学技术的使用也越来越普遍化.人们都开始自己学习编程语言以更好的适应时代的发展.今天就来为大家介绍一下,java中监听一个客户端怎么做?监听多个怎么做?一起来看看吧. ...

  4. java 包含几个字符_java中如何判断一个字符串包含几个指定字符

    java中如何判断一个字符串包含几个指定字符 可以用String类里的indexOf(String s,int i)方法,这个方法s是字符串div,i是从i下标开始查找该字符串在调用字符串中的位置,返 ...

  5. java 创建多维数组_java中如何创建一个多维数组?实例展示

    在互联网产业发展的越发如火如荼的今时今日,越来越多的人开始投入到新兴技术的学习当中去.java作为一门十分重要的编程语言,是许多人首选的学习对象.今天就来为大家介绍一下java中如何创建一个多维数组, ...

  6. java生成16位随机数_java中如何产生一个16位数字组成的随机字符串?谢谢各位了...

    展开全部 方法如下: Random ran=new random(); boolean flag=true; while(flag){ int a=ran.nextInt(99999999); int ...

  7. java 把方法当参数传递_java 中 如何将“一个类的方法 ”作为参数传到“另一个类的方法”中...

    展开全部 在java中这是没有办法做到的,因e5a48de588b662616964757a686964616f31333337396336为java不是函数式编程语言,不过可以通过传递一个接口来实现 ...

  8. java 线程缓存_Java 实现缓存,一个线程存,一个线程取

    缓存类: package com.zit.test; import java.util.concurrent.BlockingDeque; import java.util.concurrent.Li ...

  9. java里包含怎么算_java中怎么判断一个字符串中包含某个字符或字符串

    展开全部 /*这是一62616964757a686964616fe58685e5aeb931333363393630个静态函数,不用声明对象就可以用的,如你的类名为Test,在任何情况下都可以调用Te ...

最新文章

  1. 我需要运行自己的节点吗?
  2. web测试的平台的开发
  3. 有趣的开源 AI 换脸工具:faceswap
  4. 喜讯,公司换宽屏液晶显示器了
  5. 点云网络的论文理解(四)-点云网络的优化 PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space
  6. 启动定时器t0的工作指令是_看门狗的工作原理、应用和设计思路
  7. 阿里云首次在ASPLOS'19发布重磅论文:揭秘帮助ECS快速迭代的热升级技术
  8. arm linux udp 自发自收_嵌入式linux编程开发必备知识
  9. 【Spring Cloud】网关-gateway(2.x)
  10. 网格系统常用的三种比例
  11. c语言bmp转换jpeg_PDF格式转换工具
  12. express + uniapp发送图片和保存图片
  13. checking for spandsp >= 3.0... configure: error: no usable spandsp; please install spandsp3 devel pa
  14. sublime text3 最新注册码
  15. 基于TI CC2540汽车检测蓝牙4.0 BLE方案
  16. java版spring cloud电商源码+spring boot+redis多租户社交电子商务平台
  17. 阿里 java 电话面试_阿里Java开发电话面试经历--惨败
  18. PS初学者(非设计专业人士)的碎碎念
  19. 正向代理和反向代理(概念特点区别)
  20. C语言编辑时光标一直闪,win7系统编辑文字鼠标光标一直闪烁问题的解决方法 - win7吧...

热门文章

  1. 阿里云EDAS 3.0重磅发布,无侵入构建云原生应用
  2. 【机器学习】脑机接口利器:错误率仅3%
  3. OSS在线迁移服务剖析
  4. 像数据科学家一样思考:12步指南(下)
  5. OpenInfra 十一年:OpenStack 部署规模超 2500 万计算核心
  6. 不服OceanBase跑分?今天起可到阿里云上一战
  7. 浪潮云完成6亿元B轮融资,正推进上市;VMware收购AI初创公司Bitfusion;小爱同学App在苹果应用商店下架……...
  8. Storm精华问答 | Storm如何连接MySQL?
  9. 使用Vant完成DatetimePicker 日期的选择器
  10. Flowable 数据库表结构 ACT_RU_IDENTITYLINK