java多线程总结(一)

来源:互联网 发布:剑三丐帮成女脸型数据 编辑:程序博客网 时间:2024/06/09 20:54

多线程

一:什么是多线程

多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。
硬件上实现
多核处理器带有一个以上的物理内核(真正独立的处理单元),多个物理内核使得多条指令内同时执行。
(什么是线程:在一个程序中,独立运行的程序片段叫作“线程”(Thread)。同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。(线程是cpu调度的最小单位)

但是值得注意的是:2015年为止,很多计算机都是单核的,所以cpu(负责电脑调度)在一个时间段只能有一个线程在运行。所以现代多任务操作系统对cpu都是分时间片使用的,cpu快速切换线程,让我们误以为真的是同时有多个线程在运行,但其实线程还是串行的。



二:在java中怎么实现多线程

java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口.
(但确切地说应该还有一种,是实现Callable接口,并与Future、线程池结合使用)。

1:扩展java.lang.Thread

继承Thread类的方法是比较常用的一种,如果说只是想起一条线程。没有什么其它特殊的要求,那么可以使用Thread.来看下面一下的例子
package text;/** * @fution多线程练习 * @author Moots  */import java.util.*;import java.lang.Thread;import 多线程实例.threadTest;class threadTest extends Thread {private String name;public threadTest(String name) {this.name = name;}public void run(){for(int i=0;i<5;i++){System.out.println(name+"运行"+i);try {                  Thread.sleep((int) Math.random() * 10);              } catch (InterruptedException e) {                  e.printStackTrace();              }  }}}public class text {public static void main(String[] args){threadTest test1=new threadTest("A");          threadTest test2=new threadTest("B");          test1.start();          test2.start(); }}


输出:
A运行0
B运行0
B运行1
A运行1
B运行2
A运行2
A运行3
B运行3
A运行4
B运行4
再运行一次
输出:
A运行0
B运行0
A运行1
B运行1
A运行2
A运行3
B运行2
B运行3
B运行4
A运行4
说明:
程序启动运行main时候,java虚拟机启动一个进程,主线程main在main()调用时候被创建。随着调用两个对象的start方法,另外两个线程也启动了,这样,整个应用就在多线程下运行。
注意:start()方法的调用后并不是立即执行多线程代码,而是使得该线程变为可运行态(Runnable),什么时候运行是由操作系统决定的。
可以从输出结果中看出,输出都是随机输出的,所以多线程程序是乱序执行的。

2:实现java.lang.Runnable

只有从新写run方法就可以
package text;/** * @fution多线程练习 * @author Moots  */import java.util.*;import java.lang.Runnable;class threadTest2 implements Runnable{private String name;public threadTest2(String name) {this.name = name;}@Overridepublic void run(){for(int i=0;i<5;i++){System.out.println(name+"运行"+i);try {                  Thread.sleep((int) Math.random() * 10);              } catch (InterruptedException e) {                  e.printStackTrace();              }  }}}public class text {public static void main(String[] args){new Thread(new threadTest2("C")).start();          new Thread(new threadTest2("D")).start(); }}

注意:textThread2类通过实现Runnable接口,使得该类有了多线程类的特征。run()方法是多线程程序的一个约定。所有的多线程代码都在run方法里面。Thread类实际上也是实现了Runnable接口的类。
实际上所有的多线程代码都是通过运行Thread的start()方法来运行的。因此,不管是扩展Thread类还是实现Runnable接口来实现多线程,最终还是通过Thread的对象的API来控制线程的,熟悉Thread类的API是进行多线程编程的基础。




原创粉丝点击