java并发:初探sleep方法
sleep与wait
sleep是Thread方法,使得当前线程从运行态变为阻塞态。但它不会释放对象的锁。
wait方法是Object方法,它的作用是使得当前拥有对象锁的线程从运行态变为阻塞态,
它会释放对象的锁
sleep测试
package com.java.javabase.thread.sleep;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class SleepTest {
private static int coutsize = 10;
private static Object obj = new Object();
public static void main(String[] args) {
Thread t1 =new ThreadOne("t1");
Thread t2 =new ThreadOne("t2");
t1.start();
t2.start();
}
static class ThreadOne extends Thread {
public ThreadOne(String name){
super(name);
}
@Override
public void run() {
synchronized (obj){
int i = 0;
try {
while (i < coutsize) {
log.info("current thread is : {} sleep {} times ",Thread.currentThread().getName(),i++);
Thread.sleep(300);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
说明
对于拥有同一个Object对象的两个线程,当一个线程持有对象的锁,虽然多次执行Thread,线程从运行态变为阻塞态,但也不会释放对象的锁,
其他的线程只能等待。
测试结果
2019-07-29 16:49:22,156 [t1] INFO SleepTest - current thread is : t1 sleep 0 times
2019-07-29 16:49:22,469 [t1] INFO SleepTest - current thread is : t1 sleep 1 times
2019-07-29 16:49:22,782 [t1] INFO SleepTest - current thread is : t1 sleep 2 times
2019-07-29 16:49:23,094 [t1] INFO SleepTest - current thread is : t1 sleep 3 times
2019-07-29 16:49:23,407 [t1] INFO SleepTest - current thread is : t1 sleep 4 times
2019-07-29 16:49:23,720 [t1] INFO SleepTest - current thread is : t1 sleep 5 times
2019-07-29 16:49:24,032 [t1] INFO SleepTest - current thread is : t1 sleep 6 times
2019-07-29 16:49:24,345 [t1] INFO SleepTest - current thread is : t1 sleep 7 times
2019-07-29 16:49:24,658 [t1] INFO SleepTest - current thread is : t1 sleep 8 times
2019-07-29 16:49:24,970 [t1] INFO SleepTest - current thread is : t1 sleep 9 times
2019-07-29 16:49:25,283 [t2] INFO SleepTest - current thread is : t2 sleep 0 times
2019-07-29 16:49:25,596 [t2] INFO SleepTest - current thread is : t2 sleep 1 times
2019-07-29 16:49:25,909 [t2] INFO SleepTest - current thread is : t2 sleep 2 times
2019-07-29 16:49:26,221 [t2] INFO SleepTest - current thread is : t2 sleep 3 times
2019-07-29 16:49:26,534 [t2] INFO SleepTest - current thread is : t2 sleep 4 times
2019-07-29 16:49:26,847 [t2] INFO SleepTest - current thread is : t2 sleep 5 times
2019-07-29 16:49:27,159 [t2] INFO SleepTest - current thread is : t2 sleep 6 times
2019-07-29 16:49:27,472 [t2] INFO SleepTest - current thread is : t2 sleep 7 times
2019-07-29 16:49:27,785 [t2] INFO SleepTest - current thread is : t2 sleep 8 times
2019-07-29 16:49:28,098 [t2] INFO SleepTest - current thread is : t2 sleep 9 times
java并发:初探sleep方法的更多相关文章
- java并发初探ConcurrentHashMap
java并发初探ConcurrentHashMap Doug Lea在java并发上创造了不可磨灭的功劳,ConcurrentHashMap体现这位大师的非凡能力. 1.8中ConcurrentHas ...
- java并发初探CyclicBarrier
java并发初探CyclicBarrier CyclicBarrier的作用 CyclicBarrier,"循环屏障"的作用就是一系列的线程等待直至达到屏障的"瓶颈点&q ...
- java并发初探CountDownLatch
java并发初探CountDownLatch CountDownLatch是同步工具类能够允许一个或者多个线程等待直到其他线程完成操作. 当前前程A调用CountDownLatch的await方法进入 ...
- java并发初探ConcurrentSkipListMap
java并发初探ConcurrentSkipListMap ConcurrentSkipListMap以调表这种数据结构以空间换时间获得效率,通过volatile和CAS操作保证线程安全,而且它保证了 ...
- java并发初探ThreadPoolExecutor拒绝策略
java并发初探ThreadPoolExecutor拒绝策略 ThreadPoolExecuter构造器 corePoolSize是核心线程池,就是常驻线程池数量: maximumPoolSize是最 ...
- java并发初探ReentrantWriteReadLock
java并发初探ReentrantWriteReadLock ReenWriteReadLock类的优秀博客 ReentrantReadWriteLock读写锁详解 Java多线程系列--" ...
- Java并发编程核心方法与框架-Semaphore的使用
Semaphore中文含义是信号.信号系统,这个类的主要作用就是限制线程并发数量.如果不限制线程并发数量,CPU资源很快就会被耗尽,每个线程执行的任务会相当缓慢,因为CPU要把时间片分配给不同的线程对 ...
- Java并发编程核心方法与框架-CompletionService的使用
接口CompletionService的功能是以异步的方式一边生产新的任务,一边处理已完成任务的结果,这样可以将执行任务与处理任务分离.使用submit()执行任务,使用take取得已完成的任务,并按 ...
- Java并发编程核心方法与框架-TheadPoolExecutor的使用
类ThreadPoolExecutor最常使用的构造方法是 ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAli ...
随机推荐
- 6.Python字符串
#header { display: none !important; } } #header-spacer { width: 100%; visibility: hidden; } @media p ...
- 使用阿里的EasyExcel遇到的一些坑(NoSuchMethodError异常)
引入eayexcel依赖的时候已经包含了poi依赖
- CSS3绘制不规则图形,代码收集
三角形系列(三角形.倒三角.左三角.右三角.左上三角.右上三角.左下三角.右下三角) 主要用到的是:宽度高度设置为0, border的各个边的设置(各个边的透明或不透明): .triangle-up ...
- 【代码审计】VAuditDemo 命令注入漏洞
一般PHP中可以使用下列函数来执行外部的应用程序或命令 system() exec() passthru() shell_exec() 跟踪$cmd --> 跟进$target,发现传递给tar ...
- 高级T-SQL进阶系列 (一)【下篇】:使用 CROSS JOIN 介绍高级T-SQL
[译注:此文为翻译,由于本人水平所限,疏漏在所难免,欢迎探讨指正] 原文链接:传送门. 性能考虑产生了笛卡尔积的这个CROSS JOIN操作符具有一些性能方面的问题需要考虑.因为SQL引擎需要将一个数 ...
- vue项目注意事项
vue项目注意事项 1. 文件和路由命名规范 views里面代表的是你下面导航中的每一块,每个文件名 需要大写,路由命名全部小写,第一层路由就是最下面的那几个导航的名字,二级路由是在一 级路由的基础上 ...
- if条件语句!
1.if 单分支语句 if [ 条件语句 ] then 条件操作fi 例子: [root@localhost ~]# if [ 1 -eq 0 ] //如果1等 ...
- 计算机基础 - 时间戳(timestamp)位数
分为10位数字(ten digit)和13位(thirteen digit)数字 1. Unix, Python为10 time +%s import time time.time() 2. Java ...
- Vulnhub_DC1 记录
目录 Vulnhub_DC1 记录 经验 & 总结 步骤流水 1. 建立立足点 2. 提权 3. 主机信息搜集 4. 继续提权 5. 消失的flag Vulnhub_DC1 记录 参考walk ...
- cmd常用小命令
#设置n秒后自动关机 -a取消 shutdown -s -t n #输出内容到fileName里,如果文件不存在将会创建文件,>是替换,>>是追加echo something > ...