java中有关sleep的问题,头都大了,希望各位大神抽时间帮忙看看

问题描述

java中有关sleep的问题,头都大了,希望各位大神抽时间帮忙看看

public class ThreadIncludeFor extends Thread{
public ThreadIncludeFor(String name){
super(name);
}
public synchronized void run(){
for(int i=0;i<3;i++){
System.out.println(Thread.currentThread().getName()+
"循环次数:"+(i+1));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) {
ThreadIncludeFor t1=new ThreadIncludeFor("aa");
t1.start();
ThreadIncludeFor t2=new ThreadIncludeFor("bb");
t2.start();
}

}
/*aa循环次数:1
bb循环次数:1
aa循环次数:2
bb循环次数:2
aa循环次数:3
bb循环次数:3*/
//
//sleep()不是不释放锁吗?
//运行结果为什么会是aa没有退出run()方法,bb就进入了run()呢?

解决方案

首先,sleep操作是不会释放锁的;
其次,你的线程类中synchronized操作使用的是this锁,就是每个线程都有自己的this锁,之间是没有锁竞争的,因为锁对象不同。
最后,你的两个子线程的run方法都是自己各自循环的操作,输出的是各自线程名称+循环次数的。
没有什么问题啊。

解决方案二:

你两个线程都是子线程,Thread.Sleep休眠的是主线程,完全不相关啊

解决方案三:

sleep跟锁没关系,他只是休息一会,自己线程内有效

解决方案四:

你先要知道锁是什么在你写的方法中锁是this也就是当前对象你在main中开启了两个对象就是new 它们的锁肯定不同
你可以把你的方法改为静态的 它们就共用以把锁 就是ThreadIncludeFor .class对象

解决方案五:

在使用锁要必须清楚锁是谁

解决方案六:

谢谢大神们抽出时间来回答,小白已懂

时间: 2016-04-13

java中有关sleep的问题,头都大了,希望各位大神抽时间帮忙看看的相关文章

java容器 collection-JAVA中什么是容器?什么是集合?求大神指导

问题描述 JAVA中什么是容器?什么是集合?求大神指导 容器是什么?跟接口是什么关系?集合又是什么?求大神帮忙?????? 解决方案 Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),AttributeList(1.5),RoleList(1.5),RoleUnresolvedList(1.5), ConcurrentLinkedQueue(1.5),Ar

java中匿名对象和匿名类都有关键词new吧

问题描述 java中匿名对象和匿名类都有关键词new吧 java中匿名对象和匿名类都有关键词new吧 那他们应该怎么区分呢 是不是匿名类就没有方法体 匿名对象就有方法体呢 具体是如何区分的呢 解决方案 首先,匿名对象是没有变量接收的对象,例如 new Date(); 这就是定义了一个Date 类型的匿名对象,之所以叫匿名,是因为它没有变量接收,不能调用对象的.操作. 其次,匿名类是没有显示定义类文件的类,但它不一定是匿名对象,例如: Out anonyInter=new Out(){// 获取匿

java中处理JSON的开源工具都有些什么?那个比较好用?

问题描述 java中处理JSON的开源工具都有些什么?那个比较好用? java中对json进行一些便捷的操作,目前我用的是alibaba的fastjson 其它还有些什么呢?我在maven资源库中找到的有下图这些:其中twitter和org.json我貌似都用过.那么这些工具到底哪个比较方便?可以方便的实现java对象和json之间的互相转化. 解决方案 jackson这个也不错,我们的项目中就是使用这个的,直接使用下面的代码引入jar包 org.codehaus.jacksonjackson-

java-我在E盘中建立一个JAVA源代码文件,在cmd中编译代码却是图片中的样子,请大神指点。

问题描述 我在E盘中建立一个JAVA源代码文件,在cmd中编译代码却是图片中的样子,请大神指点. 我在cmd中键入命令"java -version","java","javac"几个命令,都能出现画面,说明环境变量应该配置成功了吧,但我在E盘中建立一个JAVA源代码文件,在cmd却是图片中的样子,请大神指点. 解决方案 首先你得检查你的电脑设置,是不是把文件扩展名隐藏了.如果隐藏了的话,你的文件名是Test.java其实你真正的文件是Test.j

visual studio-如何在VS2013中实现tab标签的重载,标签能够放在左边,颜色,大小都能调,大神

问题描述 如何在VS2013中实现tab标签的重载,标签能够放在左边,颜色,大小都能调,大神 解决方案 放在左边这个天然就支持,至于颜色.大小,这个需要自己重绘实现了. 解决方案二: http://blog.csdn.net/vincent1941/article/details/6304650http://www.jb51.net/article/68552.htmhttps://technet.microsoft.com/zh-cn/library/ftzc04bf(v=vs.71).asp

java小白试着分析了一下这个代码。求大神帮忙看一下正不正确;代码如下:

问题描述 java小白试着分析了一下这个代码.求大神帮忙看一下正不正确:代码如下: public class Test{ private static int i = 0; private static int j = 0; public static void main(String[] args) { int i = 2;//i之所以是2 而不是0 是因为 就近原则 int k = 3; { int j = 3; System.out.println("i+j ist"+i+&qu

函数-jquery问题求解答,想的有点多了头有点晕,求大神帮看下吧

问题描述 jquery问题求解答,想的有点多了头有点晕,求大神帮看下吧 <div class="sch_item basefix"> <span>行程类型</span> <label> <input type="radio" name="type" value = "1" checked="true" id="ai rFrom" &g

乱码什么的都很烦,大神解救解救。。。。

问题描述 乱码什么的都很烦,大神解救解救.... java写的服务端,安卓写的客户端,两个还没交互,用火狐模拟了pose点数据接收,结果乱码乱码乱乱码 1. 这是java端的代码 解决方案 你要去好好看看http协议规范. 对于请求来说,编码的方式,在Content-Type里面进行说明,比如application/x-www-form-urlencoded;charset=UTF-8; 严格意义上说,你post出去的信息要用你声明的UTF-8进行编码.这叫一致性. 当然你也可以不一致,比如服务

checkbox-jsp中el表达式问题,急!!!求大神!

问题描述 jsp中el表达式问题,急!!!求大神! 我从后台传入一个ArrayList给jsp,然后我要在jsp的foreach循环中判断这个字符串数组中是否包含我的foreach中每次遍历的一个值,应该怎么做. 代码是这样的,后台的ArrayList中有[2,3,4,5],传check给jsp,然后jsp中的代码是这样的: <c:forEach items="${compRole }" var="t" varStatus="index"