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
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
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是进行多线程编程的基础。
阅读全文
0 0
- java多线程总结(一)
- java多线程总结 (一)
- java多线程总结(一)
- Java多线程总结(一)
- Java 多线程总结(一)
- java多线程总结(一)
- java 多线程 总结一
- java多线程总结(一)(转载)
- Java多线程学习总结(一)
- java多线程学习总结(一)
- Java总结(5) 多线程(一)
- Java多线程学习总结(一)
- Java中多线程学习总结(一)
- java多线程的总结(一)
- Java多线程总结笔记(一)
- java基础 -- 多线程总结(一)--基本概念
- java多线程学习总结(一)
- java面试总结(一)- 多线程
- hql 面向对象
- JSON数据解析类型
- Python特性(十五): context manager的__exit__方法对异常的处理
- 计算机图形的简单概念了解(目的是了解GPU相关feature含义)
- mysql数据库中的left join,on和where
- java多线程总结(一)
- gdb调试多进程多线程程序
- Android SQLiteOpenHelper 的作用及使用
- 在C语言中,double、long、unsigned、int、char类型数据所占字节数
- PHP中函数的声明定义及应用举例详细分析
- 重要!!!!!struts2执行流程图
- 关于scanf("%s", &a) 和 scanf("%c", &a)标准输入的不同
- NULL NUL \0 EOF
- 3.2 Linux文件属性(3、4节)