多线程详细解析(一)
1、何为线程
在JAVA中,正在执行程序的主体即为线程。
2、单线程程序
只有一个线程有操作的程序为单线程程序(严格来说,有些线程不是在JAVA系统上面跑的,如垃圾收集使用的线程,GUI使用的线程等)
3、多线程程序
由一个以上的线程组成的程序叫做多线程程序。
Java中开启新的线程的方法
1、通过继承THread类。
package my.study.threadStudy.demo01;
public class MyThread extends Thread{
@Override
public void run() {
for(int i= 0 ;i<1000;i++){
System.out.print("hello!");
}
}
}
通过集成Thread类,并覆盖其中的run()方法,即可创建一个线程实例,但是线程并未启用。
我们稍微修改一下MyThread类。
package my.study.threadStudy.demo01;
public class MyThread extends Thread{
private String name;
public MyThread(String name) {
super();
this.name = name;
}
@Override
public void run() {
for(int i=0 ;i<1000;i++){
System.out.print(name);
}
}
}
这样我们在创建线程实例的时候。可以直接传一个参数,并且打印该参数。
现在通过一个main方法来启用该线程,Tread有一个内置的star()方法,只需调用该方法即可启用线程。
public static void main(String[] args) {
Thread t1=new MyThread("Hello");
Thread t2=new MyThread("World!");
t1.start();
t2.start();
}
打印结果为 Hello Hello Hello...World! Wordl! World!.... Hello Hello Hello...World! Wordl!
也就是说打印出来的结果是交替出现的。而并非所有的t1全部执行完成后,才执行t2.说明两个线程是同时启用的。
而当两个线程都启动后,主线程并没有马上停止,而是等到两个线程全部执行完毕后,主线程才关闭。说明当所有线程都结束后
程序才会结束。
注意:只有在调用start()方法时,线程才开始执行,而非run()方法,你也可以调用run()方法,但是这样线程并不会启用。
若计算机只有一个中央处理器,连个线程的操作情况如下
执行t1-->执行t2-->执行t1...
而并非是两个线程同时执行。事实上,程序的运行时想这样不断的切换有操作的线程。而这种操作就成为并发。
利用Runnable接口实现多线程
MyRunnable类实现了Runnable接口,并实现了run()方法。
public class MyRunnable implements Runnable{
private String name;
public MyRunnable(String name) {
super();
this.name = name;
}
@Override
public void run() {
for(int i=0;i<1000;i++){
System.out.print(name);
}
}
}
run()方法里即该线程运行的主体。
启用线程的方法如下
Thread t1=new Thread(new MyRunnable("Hello"));
Thread t2=new Thread(new MyRunnable("World!"));
t1.start();
t2.start();
Thread有个构造函数,可以将Runnable作为参数传入。
启用线程的方法仍然是.start()方法。
线程的暂时停止
Thread.sleep();
sleep()方法时Thread中内置方法,该方法可以使该线程暂时停止。
如
Thread.sleep(1000)
可以使该线程暂时停止大约1秒(1000毫秒)的时间。