马士兵-多线程学习第01课 线程的创建和启动

本文地址:http://blog.csdn.net/hblfyla/article/details/52966843


分析一下下面代码的执行顺序:

public class T {
	public static void main(String[] args) {
		m1();
	}
	
	public static  void m1() {
		m2();
		m3();
	}
	
	public static void m2() {}
	public static void m3() {}
}
执行顺序分析:

马士兵-多线程学习第01课 线程的创建和启动_第1张图片

什么是线程?

        线程是程序运行的分支。


多个cpu或者是多核处理器,在某个时间点上可以实现多个线程一起运行,单个cpu或者单核处理是,在某个时间点上就只能是一个线程在运行


线程的实现方式:

       1.继承Thread类

       2.实现Runnable接口


实现方式1:

代码:

package org.yla.msb.day01;

/**
 * @author yangluan
 * 2016年10月29日下午9:30:52
 */
public class TestThread02 {

	public static void main(String[] args) {
		MyThread m = new MyThread();
		m.start();
		
		for (int i = 0; i < 5; i++) {
			System.out.println("Main: "+i);
		}
	}
}

/**
 * 继承Thread类
 * @author yangluan
 * 2016年10月29日下午9:46:15
 */
class MyThread extends Thread{

	@Override
	public void run() {
		for (int i = 0; i < 5; i++) {
			System.out.println("Thread: "+i);
		}
	}
	
}

运行:

Main: 0
Thread: 0
Main: 1
Thread: 1
Main: 2
Thread: 2
Main: 3
Thread: 3
Main: 4
Thread: 4
Main: 5
Main: 6
Thread: 5
Main: 7
Thread: 6
Main: 8
Thread: 7
Main: 9
Thread: 8
Main: 10
Thread: 9
Main: 11
Thread: 10
Main: 12
Thread: 11
Main: 13
Thread: 12
Main: 14
Thread: 13
Main: 15
Thread: 14
Main: 16
Thread: 15
Main: 17
Thread: 16
Main: 18
Thread: 17
Main: 19
Thread: 18
Thread: 19


实现方式2:

代码:

package org.yla.msb.day01;

/**
 * @author yangluan
 * 2016年10月29日下午9:30:52
 */
public class TestThread01 {

	public static void main(String[] args) {
		Runner1 r = new Runner1();
//		r.run();
		Thread t = new Thread(r);
		t.start();
		
		for (int i = 0; i < 20; i++) {
			System.out.println("Main: "+i);
		}
	}
}

class Runner1 implements Runnable{

	@Override
	public void run() {
		for (int i = 0; i < 20; i++) {
			System.out.println("Runner: "+i);
		}
	}
	
}

运行效果: 说明程序在交替运行

Main: 0
Main: 1
Runner: 0
Main: 2
Main: 3
Runner: 1
Main: 4
Main: 5
Runner: 2
Main: 6
..............

执行流程图:

  马士兵-多线程学习第01课 线程的创建和启动_第2张图片


注意如果程序写成r.run()方法,则程序的运行结果就是顺序执行的

注意在java中启动一个线程,要调用start()方法。


本文地址:http://blog.csdn.net/hblfyla/article/details/52966843


你可能感兴趣的:(多线程)