java如何让线程阻塞_Java中如何使一个线程进入阻塞态?
按我的理解,当一个线程需要获取的锁被另一个线程占用时,将进入阻塞态。但实际好像不是这样的,下面是我的代码。
在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中如何使一个线程进入阻塞态?相关推荐
- java判断线程结束_java中如何判断一个线程是否结束
我们可以通过调用thread.Join()方法,把要判断的线程加入到当前线程中,这样可以将两个交替执行的线程合并为顺序执行的线程.如果顺利执行,则说明该线程未结束. (视频教程推荐:java视频) 比 ...
- java构造单例线程池_java中常见的六种线程池详解
之前我们介绍了线程池的四种拒绝策略,了解了线程池参数的含义,那么今天我们来聊聊Java 中常见的几种线程池,以及在jdk7 加入的 ForkJoin 新型线程池 首先我们列出Java 中的六种线程池如 ...
- java 多个监听_java中监听一个客户端怎么做?监听多个怎么做?
随着时代的不断进步与发展,人们对于科学技术的使用也越来越普遍化.人们都开始自己学习编程语言以更好的适应时代的发展.今天就来为大家介绍一下,java中监听一个客户端怎么做?监听多个怎么做?一起来看看吧. ...
- java 包含几个字符_java中如何判断一个字符串包含几个指定字符
java中如何判断一个字符串包含几个指定字符 可以用String类里的indexOf(String s,int i)方法,这个方法s是字符串div,i是从i下标开始查找该字符串在调用字符串中的位置,返 ...
- java 创建多维数组_java中如何创建一个多维数组?实例展示
在互联网产业发展的越发如火如荼的今时今日,越来越多的人开始投入到新兴技术的学习当中去.java作为一门十分重要的编程语言,是许多人首选的学习对象.今天就来为大家介绍一下java中如何创建一个多维数组, ...
- java生成16位随机数_java中如何产生一个16位数字组成的随机字符串?谢谢各位了...
展开全部 方法如下: Random ran=new random(); boolean flag=true; while(flag){ int a=ran.nextInt(99999999); int ...
- java 把方法当参数传递_java 中 如何将“一个类的方法 ”作为参数传到“另一个类的方法”中...
展开全部 在java中这是没有办法做到的,因e5a48de588b662616964757a686964616f31333337396336为java不是函数式编程语言,不过可以通过传递一个接口来实现 ...
- java 线程缓存_Java 实现缓存,一个线程存,一个线程取
缓存类: package com.zit.test; import java.util.concurrent.BlockingDeque; import java.util.concurrent.Li ...
- java里包含怎么算_java中怎么判断一个字符串中包含某个字符或字符串
展开全部 /*这是一62616964757a686964616fe58685e5aeb931333363393630个静态函数,不用声明对象就可以用的,如你的类名为Test,在任何情况下都可以调用Te ...
最新文章
- 我需要运行自己的节点吗?
- web测试的平台的开发
- 有趣的开源 AI 换脸工具:faceswap
- 喜讯,公司换宽屏液晶显示器了
- 点云网络的论文理解(四)-点云网络的优化 PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space
- 启动定时器t0的工作指令是_看门狗的工作原理、应用和设计思路
- 阿里云首次在ASPLOS'19发布重磅论文:揭秘帮助ECS快速迭代的热升级技术
- arm linux udp 自发自收_嵌入式linux编程开发必备知识
- 【Spring Cloud】网关-gateway(2.x)
- 网格系统常用的三种比例
- c语言bmp转换jpeg_PDF格式转换工具
- express + uniapp发送图片和保存图片
- checking for spandsp >= 3.0... configure: error: no usable spandsp; please install spandsp3 devel pa
- sublime text3 最新注册码
- 基于TI CC2540汽车检测蓝牙4.0 BLE方案
- java版spring cloud电商源码+spring boot+redis多租户社交电子商务平台
- 阿里 java 电话面试_阿里Java开发电话面试经历--惨败
- PS初学者(非设计专业人士)的碎碎念
- 正向代理和反向代理(概念特点区别)
- C语言编辑时光标一直闪,win7系统编辑文字鼠标光标一直闪烁问题的解决方法 - win7吧...
热门文章
- 阿里云EDAS 3.0重磅发布,无侵入构建云原生应用
- 【机器学习】脑机接口利器:错误率仅3%
- OSS在线迁移服务剖析
- 像数据科学家一样思考:12步指南(下)
- OpenInfra 十一年:OpenStack 部署规模超 2500 万计算核心
- 不服OceanBase跑分?今天起可到阿里云上一战
- 浪潮云完成6亿元B轮融资,正推进上市;VMware收购AI初创公司Bitfusion;小爱同学App在苹果应用商店下架……...
- Storm精华问答 | Storm如何连接MySQL?
- 使用Vant完成DatetimePicker 日期的选择器
- Flowable 数据库表结构 ACT_RU_IDENTITYLINK