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 ...
随机推荐
- Python 爬取 热词并进行分类数据分析-[App制作]
日期:2020.02.14 博客期:154 星期五 [本博客的代码如若要使用,请在下方评论区留言,之后再用(就是跟我说一声)] 所有相关跳转: a.[简单准备] b.[云图制作+数据导入] c.[拓扑 ...
- pom.xml文件中properties有什么用
properties标签的作用: 在标签内可以把版本号作为变量进行声明,后面dependency中用到版本号时可以用${变量名}的形式代替,这样做的好处是:当版本号发生改变时,只有更新properti ...
- ubuntu安装zsh终端
搬砖博文:https://blog.csdn.net/lxn9492878lbl/article/details/80795413 1.安装zsh sudo apt-get install zsh 2 ...
- 吴裕雄 python 神经网络——TensorFlow 变量管理
import tensorflow as tf with tf.variable_scope("foo"): v = tf.get_variable("v", ...
- Python学习第二十八课——Django(urls)
Django框架中的urls配置: 首先通过pycharm创建一个Django项目: 例如要写blog的功能:则在digango_lesson中的urls代码如下: """ ...
- jsp分割字符串并遍历
1.先引入JSTL库 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> ...
- liux vim 命令
清除所有行 先 gg 再 dG
- 2.1 MySQL基础使用
本文是课上资料的总结非原创没有转载地址 目录 引言 为什么需要数据库? 数据库和应用程序的关系 MySQL基础使用 一.数据库简介 1.1 简介 1.2 常见数据库管理系统 1.3 MySQL卸载 1 ...
- 奖学金(0)<P2007_1>
奖学金 (scholar.pas/c/cpp) [问题描述] 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金.期末,每个学生都有3门课的成绩:语文.数学.英语.先按总分 ...
- SQL SERVER 2005还原差异备份、日志备份 2012-03-29 11:43
其实要备份,还原最安全最有保障的是完全备份.但是完全备份肯定是需要更多的磁盘空间的开销.尤其是数据量比较大的.比如基数是500M,每天的增长量为10M,那么第一次完全备份是500M,第二次是510M, ...