欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

如何开启多线程

程序员文章站 2023-12-23 12:55:04
...

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

第一 种 : 就是继承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();//开启了两个线程
}

}

上一篇:

下一篇: