下面的程序,可直接运行. 我不明白其run()方法的输出语句, System.out.println((new Thread(this)).currentThread().toString()+sum);
为什么用 new Thread(this)? 按说这又创造了一个线程,但没有启动。
请给解答一下,谢谢!//====
//=========================== class ShareResource
//====
public class ShareResource
{
//------------------- main method
//----
public static void main(String[] args)
{
SumThread number1=new SumThread(1); //创建一个实现了Runnable接口的类的实例。 Thread thread1=new Thread(number1); //创建2个线程。
Thread thread2=new Thread(number1); thread1.start(); //线程启动。
thread2.start();
}//end main
}
//=========================== end ShareResource
////====
//=========================== class SumThread
//====
class SumThread implements Runnable
{
int sum=0;
int num;
//------------------- constructor
//----
public SumThread(int num)
{
this.num=num;
}
//------------------- method run
//----
public void run()
{
for(int i=1;i<5;i++)
{
sum=sum+i;
System.out.println((new Thread(this)).currentThread().toString()+sum);
try
{
Thread.sleep((int)(Math.random()*50));
}
catch(InterruptedException e)
{
System.out.println(e.getMessage());
}//end try catch
}//end for
System.out.println(sum);
}//end run
}
//=========================== end SumThread
为什么用 new Thread(this)? 按说这又创造了一个线程,但没有启动。
请给解答一下,谢谢!//====
//=========================== class ShareResource
//====
public class ShareResource
{
//------------------- main method
//----
public static void main(String[] args)
{
SumThread number1=new SumThread(1); //创建一个实现了Runnable接口的类的实例。 Thread thread1=new Thread(number1); //创建2个线程。
Thread thread2=new Thread(number1); thread1.start(); //线程启动。
thread2.start();
}//end main
}
//=========================== end ShareResource
////====
//=========================== class SumThread
//====
class SumThread implements Runnable
{
int sum=0;
int num;
//------------------- constructor
//----
public SumThread(int num)
{
this.num=num;
}
//------------------- method run
//----
public void run()
{
for(int i=1;i<5;i++)
{
sum=sum+i;
System.out.println((new Thread(this)).currentThread().toString()+sum);
try
{
Thread.sleep((int)(Math.random()*50));
}
catch(InterruptedException e)
{
System.out.println(e.getMessage());
}//end try catch
}//end for
System.out.println(sum);
}//end run
}
//=========================== end SumThread
其实可以直接写Thread.currentThread()是为了获得当时在运行的线程而已。
//====
//=========================== class ShareResource
//====
public class ShareResource
{
//------------------- main method
//----
public static void main(String[] args)
{
SumThread number1=new SumThread(1); //创建一个实现了Runnable接口的类的实例。Thread thread1=new Thread(number1); //创建2个线程。
Thread thread2=new Thread(number1);thread1.start(); //线程启动。
thread2.start();
}//end main
}
//=========================== end ShareResource
////====
//=========================== class SumThread
//====
class SumThread implements Runnable
{
int sum=0;
int num;
//------------------- constructor
//----
public SumThread(int num)
{
this.num=num;
}
//------------------- method run
//----
public void run()
{
for(int i=1;i<5;i++)
{
sum=sum+i;
System.out.println((new Thread(this)).currentThread().toString()+sum);
try
{
Thread.sleep((int)(Math.random()*50));
}
catch(InterruptedException e)
{
System.out.println(e.getMessage());
}//end try catch
}//end for
System.out.println(sum);
}//end run
}
//=========================== end SumThread这样看 会更好些
谢谢各位!
严重的问题,new Thread就为去调用 一个 静态方法,thread对象是种特殊的对象,thread对象被new出来后,如果不调用start方法,是永远不会被回收的。
这个语句说明这人连静态方法是属于类的都不知道害人不浅啊
直接Thread.currentThread().toString 就可以了