并发和并行概念
并发:多个cpu实例或者多台机器同时执行一段处理逻辑,是真正的同时
并行:在同一个时间段内,两个或多个程序执行(实际上并不是同时执行,只是通过CPU调度,让用户看起来是同时执行)
多线程:一个进程运行时产生了不止一个线程
一、多线程的实现:
1.继承Thread类本身
2.实现Runnable接口
3.通过 Callable 和 Future 创建线程。
1.Thread类
public class TestThread extends Thread{
private String name = null;
public void TestThread(String name){
this.name=name;
}
public void run(){
try{
for (int i=0 ; i<100 ; i++){
Thread.sleep(1000);
System.out.println(name+""+i);
}
}catch (Exception e){
e.printStackTrace();
}
}
}
//调用 Thread myThread = new Thread();
// ((TestThread) myThread).TestThread("千古");
// myThread.start();
二、Runnable类
public class TestThread1 implements Runnable{
private String name = null;
public TestThread1(String name){
this.name = name;
}
@Override
public void run(){
try{
for (int i=0;i<100;i++) {
Thread.sleep(1000);
System.out.println(name+" "+i);
}
}catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//调用 Thread myThread = new Thread(new TestThread1("千古"));
// myThread.start();
二、线程的生命周期
线程的状态:新建、就绪、运行、死亡、阻塞、等待、休眠
1、通过new关键字创建后,进入到新生状态
2、调用start后进入就绪状态
3、CPU调度到本线程后,本线程开始执行。进入到运行状态
4、运行中遇到join,yield,sleep造成阻塞,进入阻塞状态。阻塞完成后,又回到就绪状态
5、线程正常执行完,或者遇到异常终止后,进入死亡状态
// 开始线程
public void start( );
public void run( );
// 挂起和唤醒线程
public void resume( ); // 不建议使用
public void suspend( ); // 不建议使用
public static void sleep(long millis);
public static void sleep(long millis, int nanos);
public final native void wait() throws InterruptedException;
public final native void notify();
public final native void notifyAll();
// 终止线程
public void stop( ); // 不建议使用
public void interrupt( );
// 得到线程状态
public boolean isAlive( );
public boolean isInterrupted( );
public static boolean interrupted( );
// join方法
public void join( ) throws InterruptedException;