线程
来源:互联网 发布:珍宝岛战役 知乎 编辑:程序博客网 时间:2024/06/01 16:07
进程:每个进程都有独立的代码和数据空间,进程间的切换会有较大的开销,一个进程包含一个或多个线程。(进程是资源分配的最小单位)
线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。(线程是cpu调度的最小单位)
线程的创建,有两种方法,一种是继续Thread类,另外一种是实现Runable接口。
一、继续Thread类
下面是一个简单的例子
package com.zl.thread;/** * @author zl * @descrption 线程 * @time 2017.05.02 */class MyThread extends Thread { private String threadName; public MyThread(String threadName) { this.threadName = threadName; } public void run() { for (int i = 0; i < 5; i++) { System.out.println(threadName + "运行 : "+i); } }}public class MyThreadTest { public static void main(String[] args) { MyThread thread1 = new MyThread("Thread1"); MyThread thread2 = new MyThread("Thread2"); thread1.start(); thread2.start(); }}
运行结果如下:
Thread2运行 : 0
Thread2运行 : 1
Thread2运行 : 2
Thread2运行 : 3
Thread2运行 : 4
Thread1运行 : 0
Thread1运行 : 1
Thread1运行 : 2
Thread1运行 : 3
Thread1运行 : 4
再运行一次,则会得到不同的结果,每次运行的结果不一定相同
Thread2运行 : 0
Thread1运行 : 0
Thread1运行 : 1
Thread1运行 : 2
Thread1运行 : 3
Thread1运行 : 4
Thread2运行 : 1
Thread2运行 : 2
Thread2运行 : 3
Thread2运行 : 4
以上是两个线程thread1和thread2运行,这就引出了另一个概念,多线程。
多线程是指在同一程序中有多个顺序流在执行。从程序运行的结果可以发现,多线程程序是乱序执行。
二、实现Runnable接口(推荐)
package com.zl.thread;/** * @author zl * @descrption 线程 * @time 2017.05.02 */class MyThread implements Runnable { private String threadName; public MyThread(String threadName) { this.threadName = threadName; } public void run() { for (int i = 0; i < 5; i++) { System.out.println(threadName + "运行 : "+i); } }}public class MyThreadTest { public static void main(String[] args) { new Thread(new MyThread("Thread3")).start(); new Thread(new MyThread("Thread4")).start(); }}
运行结果如下:
Thread3运行 : 0
Thread4运行 : 0
Thread3运行 : 1
Thread4运行 : 1
Thread3运行 : 2
Thread4运行 : 2
Thread3运行 : 3
Thread4运行 : 3
Thread4运行 : 4
Thread3运行 : 4
同样的,再次运行结果不一定相同。
实现Runnable接口比继承Thread类所具有的优势:
1):适合多个相同的程序代码的线程去处理同一个资源
2):可以避免java中的单继承的限制
3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立
4):线程池只能放入实现Runable类线程,不能直接放入继承Thread的类
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- Unit2.8 文档
- Android与Js基本交互
- list循环输出
- 1270 数组的最大代价 51NOD
- jsp在tomcat上运行
- 线程
- VMWare增强功能安装
- Java 设计模式——单例模式详解
- Java源码——一个简单的应收账款文件合并程序 (Master file update in accounts receivable system)
- PAT-A-1078. Hashing (25)
- JavaWeb的两种开发模式
- AndroidStudio中修改api帮助文档本地路径问题
- [C#防止反编译].NET 产品版权保护方案 (.NET源码加密保护)
- 算法实验之线性规划解决配料问题