Java创建多线程

继承Thread方式创建子线程

1.创建一个继承Thread的子类

2.重写Thread类的run()方法,实现子线程要完成的功能

3.在主线程类中创建一个子线程类的对象

4.调用子线程类的start()方法,启动此子线程(实际上start()方法是调用了该类的run()方法)

package TestThread;

public class GeneticThreadWindow extends Thread{
	static int ticket=100;
	
	public void run(){
		while(true){
			if(ticket>0)
				System.out.println(Thread.currentThread().getName()+"卖票,票号:"+ticket--);
			else
				break;
		}
	}
}


package TestThread;

public class TestWindow {

	public static void main(String[] args) {
		GeneticThreadWindow w1=new GeneticThreadWindow();
		GeneticThreadWindow w2=new GeneticThreadWindow();
		GeneticThreadWindow w3=new GeneticThreadWindow();
		
		w1.setName("窗口1");
		w2.setName("窗口2");
		w3.setName("窗口3");
		w1.start();
		w2.start();
		w3.start();
	}
}

注:子线程类的start()方法只能启动一次。不能通过调用子线程类的run()方法来启动子线程,因为这样没有初始化线程的执行。


线程中常用的方法

1.        start():启动线程并执行相应的run()方法

2.        run():子线程要执行的代码放到run()方法中

3.        currentThread():静态方法,获取到当前的线程

4.        getName():获取线程的名字

5.        setName():设置线程的名字

6.        yield():释放当前CPU的执行权

7.        join():在A线程中调用B线程的join方法表示当调用此方法时,A线程停止执行,直到B线程执行完毕,A线程才继续执行。(插队)

8.        isAlive():判断线程是否存活

9.        sleep(long l):显示地让当前线程睡眠l毫秒

10.    线程通信:wait()   notify()  notifyAll()

11.    getPriority():

12.    setPriority():优先级最大为10,最小为1。Thread.MAX_PRIORITY就是10,Thread.MIN_PRIORITY

设置了优先级,使得线程抢到CPU使用权的概率变大,并不是优先级高执行完优先级低的再执行。


创建匿名类线程:

new Thread(){
         public void run() {
             // compute primes larger than minPrime
         }
}.start();

实现Runnable方式创建子线程

1.        创建一个实现Runnable接口的类

2.        实现Runnable的抽象方法run()

3.        创建一个Runnable接口实现类的对象

4.        将此对象作为形参传递给Thread类的构造器,创建Thread对象,此对象即为一个线程

5.        调用线程的start()方法:启动线程

package TestThread;

public class ImplementsThreadWindow implements Runnable {
	int ticket=100;
	@Override
	public void run() {
		while(true){
			if(ticket>0)
				System.out.println(Thread.currentThread().getName()+"卖票,票号:"+ticket--);
			else
				break;
		}
	}
}

package TestThread;

public class TestWindow {

	public static void main(String[] args) {
		(new TestWindow()).TestWin2();
	}
	
	public void TestWin2(){
		ImplementsThreadWindow p = new ImplementsThreadWindow();
		
		Thread w1=new  Thread(p);
		Thread w2=new  Thread(p);
		Thread w3=new  Thread(p);
		
		w1.start();
		w2.start();
		w3.start();	
		
	}
}


两种创建方式的对比

1. 联系:public class Thread extends Object implements Runnable
2. 哪一种方式好?实现的方式优于继承的方式。因为a.实现的方式避免了单继承的局限性,可以集成一个类,然后再继承Runnable接口。 b.多个线程操作同一份资源,更适合使用实现的方式。


线程的生命周期




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值