我是一名 java 程序员,我对线程有概念上的疑问。我只想知道一个线程在两种情况下会进入哪个状态。
- 当你加入一个线程时,加入的线程会进入什么状态?
- 当一个等待线程被通知时,它将进入哪个状态。可运行还是正在运行?
谢谢
- 第一个问题的详细信息
在一个程序主线程正在运行中,它创建了 3 个名为“A”、“B”和“C”的新线程。然后所有 3 个线程“A”、“B”和“C”线程加入“主”线程。现在主线程处于哪个状态。
- 第二题详情
这是等待和通知的示例代码。如果假设 2 个线程“A”和“B”开始使用“hello”对象。第一个 B 线程执行并进入“等待”状态。然后“A”线程执行并通知“B”线程。现在“等待”线程 B 将进入哪个状态。会因为对象锁被释放而直接进入Running状态还是先进入Runnable再进入Running状态?注意还有一个主线程也存在
public class Hello {
int x;
boolean flag=false;
synchronized public void push(int x)
{
if(flag)
{
try
{
wait();
}
catch(Exception e)
{
System.out.println(e);
}
}
this.x=x;
System.out.println(x +"is pushed");
flag=true;
notify();
}
synchronized public void pop()
{
if(!flag)
{
try
{
wait();
}
catch(Exception e)
{
System.out.println(e);
}
}
System.out.println(x +"is poped");
flag=false;
notify();
}
}
class A implements Runnable
{
Hello h=null;
A(Hello h,String name)
{
this.h=h;
Thread t1=new Thread(this,name);
t1.start();
}
public void run()
{
int a=1;
for(int i=0;i<7;i++)
{
h.push(a++);
}
}
}
class B implements Runnable
{
Hello h=null;
B(Hello h,String name)
{
this.h=h;
Thread t2=new Thread(this,name);
t2.start();
}
public void run()
{
for(int i=0;i<7;i++)
{
h.pop();
}
}
};
public class WaitAndNotifyDemo {
public static void main(String[] args) {
Hello h = new Hello();
A obj1=new A(h,"A");
B obj2=new B(h,"B");
}
}