从0开始 10. Java多线程

第一节:多线程的引入

定义:同时对多项任务加以控制;

public class Demo1 {

	/**
	 * 听音乐
	 */
	private static void music(){
		for(int i=0;i<1000;i++){
			System.out.println("听音乐");
		}
	}
	
	/**
	 * 吃饭
	 */
	private static void eat(){
		for(int i=0;i<1000;i++){
			System.out.println("吃饭");
		}
	}
	
	public static void main(String[] args) {
		/*music();
		eat();*/
		
		/**
		 * 利用多线程实现一边吃饭一边听歌
		 */
		Music musicThread=new Music();
		Eat eatThread=new Eat();
		musicThread.start();
		eatThread.start();
	}
}
public class Eat extends Thread{

	@Override
	public void run() {
		for(int i=0;i<1000;i++){
			try {
				Thread.sleep(100);
				System.out.println("吃饭");
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
public class Music extends Thread{

	@Override
	public void run() {
		for(int i=0;i<1000;i++){
			try {
				Thread.sleep(100);
				System.out.println("听音乐");
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

}


第二节:Java多线程实现

1,继承Thread类

public class Thread1 extends Thread{

	private int baoZi=1;
	
	private String threadName;

	public Thread1(String threadName) {
		super();
		this.threadName = threadName;
	}

	@Override
	public void run() {
		while(baoZi<=10){
			System.out.println(threadName+" 吃第"+baoZi+"包子");
			baoZi++;
		}
	}
	
	public static void main(String[] args) {
		System.out.println("张三,李四一起吃包子,每人吃了10个");
		Thread1 t1=new Thread1("张三线程");
		Thread1 t2=new Thread1("李四线程");
		t1.start();
		t2.start();
	}
	
	
}


2,实现Runnable接口

public class Thread2 implements Runnable{

	private int baoZi=1;
	
	private String threadName;

	public Thread2(String threadName) {
		super();
		this.threadName = threadName;
	}

	@Override
	public synchronized void run() {
		while(baoZi<=10){
			System.out.println(threadName+" 吃第"+baoZi+"包子");
			baoZi++;
		}
	}
	
	public static void main(String[] args) {
		/*System.out.println("张三,李四一起吃包子,每人吃了10个");
		Thread2 t1=new Thread2("张三线程");
		Thread2 t2=new Thread2("李四线程");
		Thread t11=new Thread(t1);
		Thread t12=new Thread(t2);
		t11.start();
		t12.start();*/
		
		Thread2 t1=new Thread2("超级张三线程");
		Thread t11=new Thread(t1);
		Thread t12=new Thread(t1);
		Thread t13=new Thread(t1);
		// 实现资源共享
		t11.start();
		t12.start();
		t13.start();
		
	}

}


第三节:线程状态

1,创建状态

在程序中用构造方法创建了一个线程对象后,新的线程对象便处于新建状态,此时,它已经有了相应的内存空间和其他资源,但还处于不可运行状态。新建一个线程对象可采用 Thread 类的构造方法来实现,例如,“Thread thread=new Thread();”。

2,就绪状态

新建线程对象后,调用该线程的 start()方法就可以启动线程。当线程启动时,线程进入就绪状态。此时,线程将进入线程队列排队,等待 CPU 服务,这表明它已经具备了运行条件。

3,运行状态

当就绪状态的线程被调用并获得处理器资源时,线程就进入了运行状态。此时,自动调用该线程对象的 run()方法。run()方法定义了该线程的操作和功能。

4,堵塞状态

一个正在执行的线程在某些特殊情况下,如被人为挂起或需要执行耗时的输入/输出操作时,将让出 CPU 并暂时中止自己的执行,进入堵塞状态。堵塞时,线程不能进入排队队列,只有当引起堵塞的原因被消除后,线程才可以转入就绪状态。

5,死亡状态

线程调用 stop()方法时或 run()方法执行结束后,即处于死亡状态。处于死亡状态的线程不具有继续运行的能力。

第四节:线程常用方法

1getName(); 返回该线程的名称。

2currentThread();返回对当前正在执行的线程对象的引用。

3isAlive();测试线程是否处于活动状态。

4sleep();线程休眠。

5setPriority(int newPriority);更改线程的优先级。

6yield()暂停当前正在执行的线程对象,并执行其他线程。


你可能感兴趣的:(从0开始 10. Java多线程)