1、线程简析
现在的操作系统是多任务操作系统,多任务即是多个进程,进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程,多线程是实现多任务的一种方式,线程是指进程中的一个执行流程,一个进程中可以运行多个线程。线程也称作轻量级进程。
多任务同时进行,在单核系统是不是真正意义上的同时,在线程之间实际上轮换执行,多核系统才能实现
2、定义线程
(1)扩展java.lang.Thread类,重写run()方法。
(2)实现java.lang.Runnable接口,重写run()方法。
3、实例化线程
(1)如果是扩展java.lang.Thread类的线程,则直接new即可。
(2)如果是实现了java.lang.Runnable接口的类,则用Thread的构造方法:
Thread(Runnable target)
Thread(Runnable target, String name)
Thread(ThreadGroup group, Runnable target)
Thread(ThreadGroup group, Runnable target, String name)
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
4、启动线程
在线程的Thread对象上调用start()方法,而不是run()或者别的方法。
在调用start()方法之前:线程处于新状态中,新状态指有一个Thread对象,但还没有一个真正的线程。
在调用start()方法之后:发生了一系列复杂的事情
启动新的执行线程(具有新的调用栈);
该线程从新状态转移到可运行状态;
当该线程获得机会执行时,其目标run()方法将运行。
注意:对Java来说,run()方法没有任何特别之处。像main()方法一样,它只是新线程知道调用的方法名称(和签名)。因此,在Runnable上或者Thread上调用run方法是合法的。但并不启动新的线程。
3、代码实现(实现java.lang.Runnable接口)
实现Runnable接口
package com.xxx.util;
/**
* Created with IntelliJ IDEA.
* Date: 15-3-24
* Time: 下午4:14
* To change this template use File | Settings | File Templates.
*/
public class Multiplication implements Runnable{
private int num;
public Multiplication(int num){
this.num = num;
}
@Override
public void run() {
for(int i=1;i<10;i++) {
System.out.printf(Thread.currentThread().getName() + ":%d*%d=%d\n", num, i, num * i);
}
}
}
main函数
package com.xxx.util;
/**
* Created with IntelliJ IDEA.
* Date: 15-3-24
* Time: 下午3:57
* To change this template use File | Settings | File Templates.
*/
public class Main {
public static void main(String[] args){
for(int i=1;i<10;i++){
Multiplication multiplication = new Multiplication(i);
Thread thread = new Thread(multiplication);
thread.start();
}
}
}