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();
}
}
}
}