线程的创建和启动

package com.mipo.thread;
/**
 * 进程:运行一个程序,就是启动一个进程。程序是静态的,进程是动态的。
 * 单线程:同一时间内只执行一个任务。
 * 多线程:同一时间内执行多个任务。
 * JVM在执行多线程的程序时,在某一时刻,其实也只能运行一个线程,但JVM用划分时间间隔(时间片)的机制来转换调用各个线程
 * 这个时间间隔非常短,所以,看起来像是多个线程在同时执行。
 * 
 * 
 * @author Administrator
 *
 */
public class ThreadTest1 {

	public static void main(String[] args) {
		//创建和启动多个线程
		System.out.println("主线程开始执行");
		//创建实例作为参数传入Thread的构造方法中
		Thread thread1 = new Thread(new MyRunner());
		//启动线程(并不立即运行,而是CPU调度时才运行)
		thread1.start();
		System.out.println("启动一个新线程thread1。。。。。。");
		
		//直接创建Thread的对象
		Thread thread2 = new MyThread();
		//启动线程
		thread2.start();
		System.out.println("启动一个新线程thread2。。。。。。");
		System.out.println("主线程执行完毕。。。。。。");
	}
	
	

}


//创建新线程**********************************
//方法一:实现java.lang.Runnable接口的类.(由于Java类的单继承,多实现;建议使用方式一,有利于程序代码的健壮)
/*Runnable借楼创建多线程的优点:
	1、对象可以自由的继承另一个类,解决java只支持单继承的问题
	2、同Runnable对象可以传递给多个线程,可以实现资源共享
	3、减少创建新线程实例所需的可观内存和CPU时间
*/
class MyRunner implements Runnable {

	@Override
	public void run() {
		//在线程中执行的代码
		for (int i = 0; i < 100; i++) {
			System.out.println("MyRunner:"+ i);
		}
		
	}
	
}
//方法二:继承Thread类
class MyThread extends Thread {
	public void run () {
		//在线程中执行的代码
		for (int i = 0; i < 100; i++) {
			System.out.println("MyThread:" + i);
		}
	}
}


package com.mipo.thread;
/**
 * 线程的生命周期 
 * @author Administrator
 *
 */
public class ThreadTest2 {

	public static void main(String[] args) {
		//线程休眠
		System.out.println("主线程开始执行");
		Thread thread1 = new SleepThread();
		thread1.start();
		System.out.println("启动一个新线程thread1");
		Thread thread2 = new NormalThread();
		thread2.start();
		System.out.println("启动一个新线程thread2");
		System.out.println("主线程结束");
		
		//线程让步
		Thread thread3 = new YieldThread();
		thread3.start();
		Thread thread4 = new YieldThread();
		thread4.start();
		
		
		//线程加入
		Thread thread5 = new JoinThread();
		
		//主线程中执行for循环
		for (int i = 1; i < 50; i++) {
			System.out.println(Thread.currentThread().getName() + ":" +i);
			if (i == 30) {
				try {
					thread5.start();
					thread5.join();//把子线程加入到主线程中
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}

}



//线程睡眠****************************************
class SleepThread extends Thread {
	public void run() {
		try {
			sleep(100);//让线程睡眠100毫秒
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//在线程中执行的代码
		for (int i = 0; i<50; i++) {
			System.out.println("SleepThread:"+ i);
		}
	}
}
class NormalThread extends Thread {
	public void run () {
		//在线程中执行的代码
		for (int i = 0; i<50; i++) {
			System.out.println("NormalThread:"+ i);
		}		
	}
}


//线程让步********************************************************
class YieldThread extends Thread {
	public void run () {
		for (int i = 0; i < 50; i++) {
			System.out.println(Thread.currentThread().getName()+ ":" + i);
			if (i % 10 == 0){//当i可以被10整除,当前线程可以让步给其他线程
				Thread.yield();//线程让步,给别的线程执行的机会
			}
		}
	}
}


//线程加入********************************************************
//有时需要线程间的接力来完成某项任务,这就需要调用线程类的join()方法,join()方法可以是两个交叉执行的线程顺序执行
class JoinThread extends Thread {
	public void run () {
		for (int i = 1; i <= 20; i++) {
			System.out.println(Thread.currentThread().getName()+ ":" + i);
			try {
				sleep(10);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值