从头认识java-17.1 多线程
2016-01-10 08:39
429 查看
这一章节我们来讨论一下多线程。
1.什么是多线程?
多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理(Chip-level multithreading)或同时多线程(Simultaneous multithreading)处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理(Multithreading)”。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程(台湾译作“执行绪”),进而提升整体处理性能。
说白了,一个线程就是一个任务,多线程就是程序分为多个任务并行运行
2.线程与进程的区别?
区别在于是否有共享变量。
进程有一套自己的变量,进程间不共享。
线程之间存在共享变量,共享IO、内存等资源
输出:
WriteTxtA
WriteTxtB
WriteTxtB
WriteTxtA
WriteTxtA
WriteTxtB
WriteTxtA
WriteTxtB
WriteTxtA
WriteTxtB
上面的例子就是共享 了FileWriter这个IO资源。
3.例子:
输出:
PrintA
PrintB
PrintA
PrintB
PrintA
PrintB
PrintA
PrintB
PrintA
PrintB
4.实现多线程的过程
(1)实现Runnable接口
(2)创建一个类对象
(3)使用Runnable对象构造Thread对象
(4)运行start方法
总结:这一章节介绍了线程的一些方面。
这一章节就到这里,谢谢。
-----------------------------------
目录
1.什么是多线程?
多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理(Chip-level multithreading)或同时多线程(Simultaneous multithreading)处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理(Multithreading)”。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程(台湾译作“执行绪”),进而提升整体处理性能。
说白了,一个线程就是一个任务,多线程就是程序分为多个任务并行运行
2.线程与进程的区别?
区别在于是否有共享变量。
进程有一套自己的变量,进程间不共享。
线程之间存在共享变量,共享IO、内存等资源
package com.ray.ch17; import java.io.FileWriter; import java.io.IOException; import java.util.concurrent.CountDownLatch; public class Test2 { public static void main(String[] args) throws IOException, InterruptedException { CountDownLatch countDownLatch = new CountDownLatch(2); FileWriter fileWriter = new FileWriter("d://123.txt"); WriteTxtA writeTxtA = new WriteTxtA(fileWriter, countDownLatch); WriteTxtB writeTxtB = new WriteTxtB(fileWriter, countDownLatch); Thread threadA = new Thread(writeTxtA); Thread threadB = new Thread(writeTxtB); threadA.start(); threadB.start(); countDownLatch.await(); fileWriter.close(); } } class WriteTxtA implements Runnable { private FileWriter fileWriter; private CountDownLatch countDownLatch; public WriteTxtA(FileWriter fileWriter, CountDownLatch countDownLatch) { this.fileWriter = fileWriter; this.countDownLatch = countDownLatch; } @Override public void run() { try { for (int i = 0; i < 5; i++) { System.out.println("WriteTxtA"); fileWriter.write("WriteTxtA /n"); Thread.sleep(50); } countDownLatch.countDown(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } } class WriteTxtB implements Runnable { private FileWriter fileWriter; private CountDownLatch countDownLatch; public WriteTxtB(FileWriter fileWriter, CountDownLatch countDownLatch) { this.fileWriter = fileWriter; this.countDownLatch = countDownLatch; } @Override public void run() { try { for (int i = 0; i < 5; i++) { System.out.println("WriteTxtB"); fileWriter.write("WriteTxtB /n"); Thread.sleep(50); } countDownLatch.countDown(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }
输出:
WriteTxtA
WriteTxtB
WriteTxtB
WriteTxtA
WriteTxtA
WriteTxtB
WriteTxtA
WriteTxtB
WriteTxtA
WriteTxtB
上面的例子就是共享 了FileWriter这个IO资源。
3.例子:
package com.ray.ch17; public class Test2 { public static void main(String[] args) { PrintA printA = new PrintA(); PrintB printB = new PrintB(); Thread threadA = new Thread(printA); Thread threadB = new Thread(printB); threadA.start(); threadB.start(); } } class PrintA implements Runnable { @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println("PrintA"); try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } } } class PrintB implements Runnable { @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println("PrintB"); try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } } }
输出:
PrintA
PrintB
PrintA
PrintB
PrintA
PrintB
PrintA
PrintB
PrintA
PrintB
4.实现多线程的过程
(1)实现Runnable接口
class PrintA implements Runnable { @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println("PrintA"); try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } } }
(2)创建一个类对象
PrintA printA = new PrintA();
(3)使用Runnable对象构造Thread对象
Thread threadA = new Thread(printA);
(4)运行start方法
threadA.start();
总结:这一章节介绍了线程的一些方面。
这一章节就到这里,谢谢。
-----------------------------------
目录
相关文章推荐
- Java Swing JTable 表格【3:创建表格,表头存在的设置】
- Junit单元测试Spring框架接口
- 关于Eclipse编译和执行文件时,后台默认执行动作的思考
- (spring-第14回【IoC基础篇】)国际化信息
- NO.90 Struts2.3.15.1升级总结
- Java学习之自定义异常
- java中垃圾回收(gc)
- Java学习之开篇—个人随想
- 【慕课笔记】第二章 变量和常量 第8节 JAVA中的强制类型转换
- ubuntu安装java
- 处理SpringMVC返回json乱码问题
- java类加载全过程
- 拓扑排序详解以及java实现
- java基础学习笔记2
- Java Swing JTable 表格【2:创建空表格】
- 第二章 IoC 之 2.1 IoC基础
- 第一章 Spring概述
- struts2整合CXF访问路径冲突问题
- springboot(一)
- 谷歌GSON可以把Java对象转换成JSON,也可以把JSON换成一个相等的Java对象