一、学习线程需要清楚的三个概念
1.进程:进程是一个静态的概念
2.线程:一个进程里边有一个主线程叫main()的方法,是一个程序里边的,一个进程里边不同的执行路径。
3.在同一时间点,一个CPU只执行一个线程。因为CPU的运行速度很快,因此我们看起来就像多线程一样。
什么才是真正的多线程?如果你的机器是双CPU或者双核,这确确实实是多线程。
二、线程的创建和启动
1.利用实现Runnable接口创建和启动新线程的案例
package cn.galc.test; public class TestThread1{ public static void main(String args[]){ Runner1 r1 = new Runner1();//这里new了一个线程类的对象出来 //r1.run();//这个称为方法调用,方法调用的执行是等run()方法执行完之后才会继续执行main()方法 Thread t = new Thread(r1);//要启动一个新的线程就必须new一个Thread对象出来 //这里使用的是Thread(Runnable target) 这构造方法 t.start();//启动新开辟的线程,新线程执行的是run()方法,新线程与主线程会一起并行执行 for(int i=0;i<10;i++){ System.out.println("maintheod:"+i); } } } /*定义一个类用来实现Runnable接口,实现Runnable接口就表示这个类是一个线程类*/ class Runner1 implements Runnable{ public void run(){ for(int i=0;i<10;i++){ System.out.println("Runner1:"+i); } } }
2.继承Thread类,重写run方法来创建和启动新线程
package cn.galc.test; public class TestThread1{ public static void main(String args[]){ Runner1 r1 = new Runner1();//这里new了一个线程类的对象出来 //r1.run();//这个称为方法调用,方法调用的执行是等run()方法执行完之后才会继续执行main()方法 Thread t = new Thread(r1);//要启动一个新的线程就必须new一个Thread对象出来 //这里使用的是Thread(Runnable target) 这构造方法 t.start();//启动新开辟的线程,新线程执行的是run()方法,新线程与主线程会一起并行执行 for(int i=0;i<10;i++){ System.out.println("maintheod:"+i); } } } /*定义一个类用来实现Runnable接口,实现Runnable接口就表示这个类是一个线程类*/ class Runner1 implements Runnable{ public void run(){ for(int i=0;i<10;i++){ System.out.println("Runner1:"+i); } } }
注意:使用这两种方法开辟新的线程时,优先考虑使用实现Runnable接口的方式去开辟新的线程,因为接口的实现可以实现多个,而类的继承只能是单继承。