Java中的多线程错误
我实现了一个简单的线程程序,其中一个线程将元素推入堆栈,另一个线程从堆栈中弹出元素。我得到了一个意外的输出,其中thread1两次推送一个元素Java中的多线程错误,java,multithreading,Java,Multithreading,我实现了一个简单的线程程序,其中一个线程将元素推入堆栈,另一个线程从堆栈中弹出元素。我得到了一个意外的输出,其中thread1两次推送一个元素 import java.io.*; import java.lang.*; import java.util.*; public class Threading_Sample implements Runnable { private Thread T1,T2; String ThreadName=""; Stack<I
import java.io.*;
import java.lang.*;
import java.util.*;
public class Threading_Sample implements Runnable
{
private Thread T1,T2;
String ThreadName="";
Stack<Integer> Stack1=new Stack<Integer>();
public void Push_Element_to_Stack(int element)
{
Stack1.push(element);
}
public void Pop_Element_from_Stack()
{
Stack1.pop();
}
public void run()
{
try
{
//while(Thread.currentThread().isAlive())
for(int i=0;i<10;i++)
{
if(T1.getName().equals("THREAD1"))
{
System.out.println("Current Thread: "+T1.getName());
System.out.println("DOING TASK 1...");
Push_Element_to_Stack(i);
Thread.sleep(100);
System.out.println("Stack1 of Thread1: "+Stack1);
}
if(T2.getName().equals("THREAD2"))
{
System.out.println("Current Thread: "+T2.getName());
System.out.println("DOING TASK 2...");
System.out.println("Stack of Thread2 before: "+Stack1);
Pop_Element_from_Stack();
Thread.sleep(100);
System.out.println("Stack of Thread2 after: "+Stack1);
}
}
}
catch(Exception e)
{
System.out.println("Thread interrupted...");
e.printStackTrace();
}
}
public void start()
{
if(T1==null)
{
T1=new Thread(this,"THREAD1");
T1.start();
try
{
T1.join();
}
catch(Exception e)
{
e.printStackTrace();
}
}
if(T2==null)
{
T2=new Thread(this,"THREAD2");
T2.start();
try
{
T2.join();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
public static void main (String[] args)
{
Threading_Sample TASK1=new Threading_Sample();
TASK1.start();
}
}
import java.io.*;
导入java.lang.*;
导入java.util.*;
公共类线程化\u示例实现可运行
{
私有线程T1,T2;
字符串ThreadName=“”;
Stack Stack1=新堆栈();
公共void将元素推送到堆栈(int元素)
{
1.推送(元件);
}
public void Pop_元素_from_Stack()
{
Stack1.pop();
}
公开募捐
{
尝试
{
//while(Thread.currentThread().isAlive())
对于(inti=0;i您想要检查当前线程的名称
Thread.currentThread().getName()
不是T1在run()中的名称
无论哪个线程执行它,它总是true
Thread.currentThread().getName()