当前位置: 代码迷 >> Java相关 >> java中的线程有关问题
  详细解决方案

java中的线程有关问题

热度:70   发布时间:2016-04-22 21:01:30.0
java中的线程问题
本帖最后由 helloselang92 于 2014-08-09 17:22:53 编辑
public class Resource {
synchronized void function1(Thread currThread)
{
System.out.println(currThread.getName()+
"线程执行function1方法!!!");
try
{
Thread.sleep(1000);
System.out.println(currThread.getName()
+"线程睡醒了!!!");
}
catch(Exception e)
{
e.printStackTrace();
}
}
synchronized void function2(Thread currThread)
{
System.out.println(currThread.getName()+
"线程执行function2方法!!!");
}
}
//自定义线程类
class MyThread extends Thread
{
//资源对象的引用
Resource rs;
//构造器
public MyThread(String tName,Resource rs)
{
this.setName(tName);
this.rs=rs;
}
public void run()
{
if(this.getName().equals("Thread1"))
{//如果线程名称是Thread1访问资源的function1方法
rs.function1(this);
}
else
{//如果线程名称不是Thread1访问资源的function2方法
System.out.println("Thread2启动,等待进入同步方法function2!!!");
rs.function2(this);
}
}
}


public class Sample10_1 {



public static void main(String args[])
{
Resource rs=new Resource();
MyThread t1=new MyThread("线程1",rs);
MyThread t2=new MyThread("线程2",rs);


t1.start();
try
{
Thread.sleep(10);
}
catch(Exception e)
{
e.printStackTrace();

t2.start();
}
}


结果:


这个结果看不懂啊,我认为结果不是应该这样子吗:
线程1线程执行function1方法!!!(然后睡眠1000的时间);
Thread2启动,等待进入同步方法function2!!!(因为线程1还没出来,所以不执行function2);
线程1睡醒了!!!(线程1退出function1);
线程2线程执行function2方法!!!(线程2进入执行)。


疑问:为什么结果和我想的不一样啊?最坑爹的是线程1不是执行function1方法吗,怎么最后结果变成执行function2方法去了?
------解决方案--------------------
if(this.getName().equals("Thread1"))
{//如果线程名称是Thread1访问资源的function1方法
rs.function1(this);
}

你什么时候创建了名字为Thread1的线程了?
以后发代码记得用格式,不然太难看了。