Java基础-多线程基本用法
2020-03-29 19:10
260 查看
多线程
1、什么是进程和线程
进程: 在操作系统上面运行的一个软件,一个exe程序(windows系统)
- 进程是系统进行资源分配和调用的独立单元,每一个进程都有它的独立内存空间和系统资源
线程: cpu执行的最小单位;一个进程里面有多个线程;
- 一个进程里面,有多个线程; 多线程;
- 每个线程可以做不同的事情;也可以多个线程负责一件之情;
- 多线程,并不能在cpu的层面,节省时间;
- 线程的执行是抢占式的:当前运行的线程在任何时候都可能被挂起,以便另一个线程可以运行. 随机性
线程是进程的组成部分,一个进程可以有多个线程,但一个线程必须有一个父进程.线程可以拥有自己的栈,自己的程序计数器和自己的局部变量,但不拥有系统资源,它与父进程的其他线程共享该进程所拥有的全部资源.因为多个线程共享父进程的所有资源,因此编程比较方便,但必须更加小心,需要确保线程不会妨碍到同一进程里的其他线程. 线程是独立运行的,它并不知道进程中是否还有其他的线程存在.线程的执行是抢占式的:当前运行的线程在任何时候都可能被挂起,以便另一个线程可以运行. 随机性 一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行. 从逻辑角度来看,多线程存在于一个应用程序中,让一个应用程序可以有多个执行部分同时进行,但操作系统无须将多个线程看做多个独立的应用,对多线程实现调度和管理以及资源分配.线程的调度和管理由进程本身负责完成.
线程运行时间
并不是线程自己决定自己什么时候运行,连进程也不能决定; 由我们CPU(皇帝)来选择;
一定是由CPU来选择这个时间片交给哪个线程去运行; (线程,可以放弃),最后还是由CPU来选择;
2、 Java如何实现多线程
代码顺序分先后,线程的执行自己跑自己的;
2.1 继承Thread
public class MyThread extends Thread{ public void run(){ //我们这个线程需要实现的功能;要完成任务 } } //1: 新建一个线程对象; //2: 调用start方法;
package com.qianfeng.xqc.day0311; /** * 可以创建多个线程 * 线程之间是 并行 * t1 线程 和 t2线程的执行顺序:随机,CPU皇帝(宠幸谁,谁就先运行) * */ public class TestThreadExtends { //运行的时候,main是一个线程(主线程) public static void main(String[] args) { System.out.println("start"); //创建2个线程对象 ThreadDemd t1 = new ThreadDemd("t1"); ThreadDemd t2 = new ThreadDemd("t2"); //通过线程对象启动线程 t1.start(); t2.start(); System.out.println("end"); } } /** * 线程的任务,都是写在run方法里面 * 继承Thread * */ class ThreadDemd extends Thread{ private String name; public ThreadDemd() { } public ThreadDemd(String name) { super(); this.name = name; } @Override public void run() { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } for(int i = 0;i < 10;i++) { System.out.println(name +":"+ i); } } }
2.2 实现Runnable
public class MyRunable implements Runnable{ public void run(){ //做我们要做的任务; } } //1:新建一个MyRunable对象; //2:新建一个Thread对象(MyRunable); //3:通过trhead对象来调用start方法;运行我们的线程;
package com.qianfeng.xqc.day0311; public class TestThreadIterface { public static void main(String[] args) { System.out.println("start"); //实例化一个线程任务类,通过Thread回调使用 Thread t1 = new Thread(new ThreadRunnable("线程一")); Thread t2 = new Thread(new ThreadRunnable("线程二")); //启动线程 t1.start(); t2.start(); System.out.println("end"); } } /** * 实现Runnable,实现多线程 */ class ThreadRunnable implements Runnable{ private String name; public ThreadRunnable() {} public ThreadRunnable(String name) { super(); this.name = name; } public void run() { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } for(int i = 0;i < 10;i++) { System.out.println(name +":"+ i); } } }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- java线程基础(一些常见多线程用法)
- Java语言基础逻辑运算符的基本用法
- Java多线程(一)基本用法
- Java语言基础算术运算符的基本用法
- 【Java基础】常用IO流的基本用法演示(持续更新)
- Java 多线程基础-基本概念
- Java集合基础篇(3)-HashSet基本用法
- java多线程之CyclicBarrier类基本用法
- 黑马程序员——java基础之多线程基本概念
- Java语言基础三元运算符的基本用法
- java多线程之Semaphore类基本用法
- Java基础教程16-String的基本用法
- Java-并发编程基础--多线程用法
- java基础(3)——八大基本数据类型和类型转换,以及运算符用法
- 黑马程序员-19-java基础-多线程(2)-死锁与线程间通信(synchronized与Lock的区别及各自用法)
- Java基础系列:(4)多线程的一些用法示例
- JAVA基础 day21 字节流的输入和输出 字节流的缓冲区 (自己实现BufferedInputStream) 键盘输入 转换流的用法 改变标准输入输出设备 IO流操作的基本规律
- Java多线程基本用法总结
- java语言基础(13)——运算符基本用法(算数、赋值、比较、逻辑、位运算符)
- Java多线程基础--01之 基本概念