多线程在软件开发中用得很多,现在几乎所有的软件都用到了多线程,如:QQ、迅雷、eclipe集成开发环境等。
什么是多线程?
当一个程序启动后就是一个进程,可以理解进程就是CPU的一个执行流程,而多线程就是在一个进程内执行多个线程,相当于在一个执行流程内开辟多个执行序列,举个例子:一个服务员每天要做端菜、洗碗、拖地等事情,每件事情可以理解为一个执行流程,让他开始洗碗那么他必须要把碗洗完了才能做其他的事情(流程),这样效率就很低,如果在他正在洗碗的时候能够做其它事情那么就很高效了,如他正在洗碗,这时让他去端菜,那就暂时停止洗碗去端菜,菜端完了继续洗碗。
时间片:
简单理解就是分配给线程的执行时间,实际上线程在微观上是串行执行的,也就是一个个执行,但是系统给每个线程都分配的执行时间,
如:
线程1 分配10ms的执行时间
线程2 分配10ms的执行时间
由于时间很短给人的感觉就是多个线程在一起执行。
线程的生命周期:
一个线程从创建、启动、结束有几种状态。
1.新建 线程已经准备就绪还没启动
2.运行 线程正在执行(在分配的时间内)
3.阻塞 线程已经启动但没有获得执行时间而处于等待队列中
4.结束 线程已经执行完毕并释放相关资源
Java实现多线程的3种方式:
1.让一个需要实现线程操作的类继承至Thread类,并重写父类的run方法
2.让一个需要实现线程操作的类实现Runnable接口
3.使用Timer和TimerTask组合
第一种实现方法:
package mypackage;
/**
* 继承至Thread类使能够执行线程
* @author dream
*
*/
public class MyThread extends Thread
{
public static void main(String[] args)
{
MyThread myth=new MyThread();
myth.start();
System.out.println("主线程");
}
//线程的调用run方法执行
public void run()
{
int n=10;
while(true)
{
if(n>0)
{
try
{
System.out.println(n);
n--;
Thread.sleep(1000);
}
catch(Exception ex)
{
}
}
}
}
}
第二种实现方法:
package mypackage;
/**
* 实现Runnable接口执行线程操作
* @author dream
*
*/
public class MyThread1 implements Runnable
{
public static void main(String[] args)
{
MyThread myth=new MyThread();
myth.start();
System.out.println("主线程");
}
public void run()
{
int n=10;
while(true)
{
if(n>0)
{
try
{
System.out.println(n);
n--;
Thread.sleep(1000);
}
catch(Exception ex)
{
}
}
}
}
}
第三种实现方法:
package mypackage;
import java.util.Timer;
import java.util.TimerTask;
public class MyThread2 extends TimerTask
{
public static void main(String[] args)
{
MyThread2 myth=new MyThread2();
Timer timer=new Timer();
timer.schedule(myth, 0);//启动线程
System.out.println("主线程");
}
public void run()
{
int n=10;
while(true)
{
if(n>0)
{
try
{
System.out.println(n);
n--;
Thread.sleep(1000);
}
catch(Exception ex)
{
}
}
}
}
}