如何开启多线程

/*一个类要想开启多线程有两种方法。

第一 种 : 就是继承java中自带的Thread类

开启多线程要求:

1, 继承Thread类
2。重写Thread类中的run方法 为什么? 因为run方法中封装的就是开启多线程你想要同时运行的代码
3.创建继承Thread类的子类的对象创建线程。 因为该子类继承了线程Thread类,那么该子类便也是属于了线程类,就像一个类继承了异常类
4.调用start方法 为什么呢? 因为如果不调用start方法,直接调用run方法,那么就和普通一个对象兼用一个方法没有区别!!!
调用start方法才是开启多线程!!!!注意:调用了start方法,也就意味着调用了run方法,因为start方法会自动调用run方法!!!
*/
class Zi extends Thread{
private String name;
public Zi(String name){
this.name = name;
}
public void run(){
for(int x=0;x<10;x++)
System.out.println(name+x);
}
}
public class ThreadDemo {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	Zi z1 = new Zi("超哥");
	Zi z2 = new Zi("二孟");
	z1.run();
	z2.run();
//以上 结果  依然按照单线程顺序执行	
	Zi z3 = new Zi("超哥");
	Zi z4 = new Zi("二孟");
	z3.start();
	z4.start();
//输出结果是    开启了多线程,随机输出!!!!
}

}

第二种 :开启多线程的方法

//实现Runnable接口
/*
java中Thread类的大致写法:
class Thread{
private Runnable r Runnable是一个接口!!!
public Thread(){

	}
	public Thread(Runnable r){
		this.r = r;
	}
	public void run(){
		if(r!=null)
			r.run();
	}
	public void start(){
		run();
	}
}

*/
class DeChao implements Runnable{
public void run(){
show();
}

public void show(){
	for(int x=0;x<10;x++){
		System.out.println(x+Thread.currentThread().getName());
		//getName()是获取线程!
		//而    Thread.currentThread().getName()   是获取    当前     线程
		//当前线程的写法: Thread-编号(编号从0开始!)
	}
}

}
public class ThreadDemo2 {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	DeChao d = new DeChao();//因为没有继承Thread类,所此时创建对象,并没有创建多线程!!!!
	Thread t =new Thread(d);//创建多线程!1既然没有继承多线程类那就用java自带的多线程类,创建线程!!!!
	t.start();//开启多线程!
	System.out.println(Thread.currentThread().getName());
	//为什么用t调用start方法???
	//因为DeChao类并没有继承Thread类,没有start方法!
}

}

练习

/*
*需求:卖票
**/
class ErMeng implements Runnable{
private static int num = 100;//为什么要写静态呢? 因为e1,e2共同卖100张票,所以我要让他e1,e2共享一个num
//可以不写static也实现这种功能吗?
//可以,让创建的线程共用一个对象!
public void run(){
shouMai();
}
public void shouMai(){
while(true){//为什么要写上if呢?不是已经有while条件了吗? 因为如果不写if,下面的输出语句会一直输出,所以加上if,当不满足if条件时,我就不输出,尽管while还在运行!!!
if(num>0)
System.out.println(Thread.currentThread().getName()+“正在售卖第”+num–+“张票”);
}
}
}
public class ThreadTest {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	ErMeng e1 = new ErMeng();
	//ErMeng e2 = new ErMeng();
	Thread t1 = new Thread(e1);
	Thread t2= new Thread(e1);//创建了两个线程
	t1.start();
	t2.start();//开启了两个线程
}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值