黑马程序员技术交流社区
标题:
线程问题!就解答
[打印本页]
作者:
权跃杰
时间:
2012-8-8 18:43
标题:
线程问题!就解答
class Ticket extends Thread implements Runnable
{
private int ticket=100;
public Ticket(String name)
{
super(name);
}
public void run()
{
while(true)
{
if(ticket>0)
{
System.out.println(Thread.currentThread().getName()+"----sale--"+ ticket--);//这里我想显示我定义的线程名称的信息,该怎么修改
}
}
}
}
class TicketDemo
{
public static void main(String[] args)
{
Ticket t=new Ticket("one");//创建多个线程怎么给线程分别弄名字
Thread f=new Thread(t);
Thread f1=new Thread(t);
Thread f2=new Thread(t);
Thread f3=new Thread(t);
f.start();
f1.start();
f2.start();
f3.start();
}
}
作者:
李志广
时间:
2012-8-8 19:22
class Ticket
extends Thread
{
private int ticket=100;
public Ticket(String name)
{
super(name);
}
public void run()
{
while(true)
{
if(ticket>0)
{
System.out.println(
Thread.currentThread().getName()
+"----sale--"+ ticket--);
//获取当前的线程名称
}
}
}
}
class TicketA
{
public static void main(String[] args)
{
Ticket t1=new Ticket("ont");
Ticket t2=new Ticket("two");
Ticket t3=new Ticket("three");
Ticket t4=new Ticket("four");
t1.start();
t2.start();
t3.start();
t4.start();
}
}
楼主写的代码有些凌乱,这是我修改后的。你可能对Thread和Runnable 还不太了解。以下是毕老师讲课时的一些总结!!!!!!!
一下是Thread和Runnable的区别和联系:
创建线程的第一种方式:
继承Thread类。
步骤:
1,定义类继承Thread。
2,复写Thread类中的run方法。
目的:将自定义代码存储在run方法。让线程运行。
3,调用线程的start方法,
该方法两个作用:启动线程,调用run方法。
创建线程的第二种方式:实现Runable接口
步骤:
1,定义类实现Runnable接口
2,覆盖Runnable接口中的run方法。
将线程要运行的代码存放在该run方法中。
3,通过Thread类建立线程对象。
4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
为什么要将Runnable接口的子类对象传递给Thread的构造函数。
因为,自定义的run方法所属的对象是Runnable接口的子类对象。
所以要让线程去指定指定对象的run方法。就必须明确该run方法所属对象。
5,调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。
实现方式和继承方式有什么区别呢?
实现方式好处:避免了单继承的局限性。
在定义线程时,建立使用实现方式。
两种方式区别:
继承Thread:线程代码存放Thread子类run方法中。
实现Runnable,线程代码存在接口的子类的run方法。
希望对你有所帮助!!!!!{:soso_e100:}
作者:
权跃杰
时间:
2012-8-8 19:34
继承中就是你回答的代码,我想问下实现接口中没有办法给多个线程取名字吗??
作者:
牛杨
时间:
2012-8-9 00:59
权跃杰 发表于 2012-8-8 19:34
继承中就是你回答的代码,我想问下实现接口中没有办法给多个线程取名字吗?? ...
你可以使用Thread类的另一个构造函数: public Thread(Runnable target, String name) java API里面有。
其中第二个参数就是为自定义的线程起名字的。
作者:
牛杨
时间:
2012-8-9 00:59
本帖最后由 牛杨 于 2012-8-9 01:01 编辑
权跃杰 发表于 2012-8-8 19:34
继承中就是你回答的代码,我想问下实现接口中没有办法给多个线程取名字吗?? ...
你可以使用Thread类的另一个构造函数: public Thread(Runnable target, String name) java API里面有。
其中第二个参数就是为自定义的线程起名字的。
有什么需求 先 看看java API 就好了 ,基本上就都能解决了
作者:
潘星
时间:
2012-8-9 02:19
通过继承Thread创建线程跟实现Runnable接口来创建线程给线程起名字还是有区别的,
若是继承Thread类,因为Thread类有构造函数是可以传递String参数作为其线程名称的,
所有子类可以用父类已经定义好的构造函数给线程初始化名称。
实现Runnable接口是有点区别的,以下使用代码做的一个举例,希望对你有帮助。
class ThreadTest
{
public static void main(String[] args)
{
Pan p1=new Pan("线程1");//继承Thread方法给线程初始化名字
Pan p2=new Pan("线程2");//你如果想修改线程名称,通过setName()方法就可以修改
p1.setName("将p1线程改了名字");
p1.start();
p2.start();
Xing x1=new Xing();
Xing x2=new Xing();
Thread t1=new Thread(x1,"一号线程");//实现Runnable接口给线程初始化名字
Thread t2=new Thread(x2,"二号线程");
t1.setName("将一号改名字");
t1.start();
t2.start();
}
}
class Pan extends Thread
{
Pan(String name)
{
super(name); //这里若不写构造函数,则线程用的是默认的名字。
}
public void run()
{
for (int x=0;x<100 ;x++ )
{
System.out.println(Thread.currentThread().getName()+"....."+x);//获取线程名称
}
}
}
class Xing implements Runnable
{
public void run()
{
for (int x=0;x<100 ;x++ )
{
System.out.println(Thread.currentThread().getName()+"....."+x);//获取线程名称
}
}
}
作者:
杜佳瑞
时间:
2012-8-9 02:36
其实要实现楼主的想法很简单,就差一个覆盖Thread的一个构造函数。
class Ticket implements Runnable
{
private int ticket=100;
public void run()
{
while(true)
{
if(ticket>0)
{
System.out.println(Thread.currentThread().getName()+"----sale--"+ ticket--);//这里我想显示我定义的线程名称的信息,该怎么修改
}
}
}
}
class SubThread extends Thread
{
SubThread(Runnable target,String name)//这个构造函数可查API,一般传一个Runnable子类对象的时候比较多,其实还可以在这里定义线程的名称
{
super(target,name);
}
}
class TicketDemo
{
public static void main(String[] args)
{
Ticket t=new Ticket();//创建多个线程怎么给线程分别弄名字
Thread f=new SubThread(t,"线程f");
Thread f1=new SubThread(t,"线程f1");
Thread f2=new SubThread(t,"线程f2");
Thread f3=new SubThread(t,"线程f3");
f.start();
f1.start();
f2.start();
f3.start();
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2