java多线程基础
来源:互联网 发布:网络语膜拜是什么意思 编辑:程序博客网 时间:2024/05/29 06:39
1.在将多线程的前提下我先讲讲线程和进程的关系
进程,一个应用对应一个进程,操作系统(OS)管理进程,进程启动需要资源CPU,内存。OS分配资源给进程,一个进程下面可以有很多线程,用来执行代码,线程不能脱离进程独立运行首先。JVM(关于java虚拟机)是一个进程,JVM会创建一个专门的一个线程(main)去执行main方法,JVM中还有GC垃圾回收的线程等等。
2.线程分为前台线程,和后台线程
前台线程 代码(new Thread()...)
后台线程 JVM分配的线程(main)
3.单线程,多线程
单线程:顺序执行
多线程:线程各自执行不一定有先后
4.简单示例
public class ThreadTest {public static void main(String[] args) {Thread thread = Thread.currentThread();//获取当前线程对象System.out.println(thread.getName());//当前线程的名字mainSystem.out.println("开始");ThreadTest test = new ThreadTest();test.test();System.out.println("结束");MyThread myThread = new MyThread();//自定义线程System.out.println("开始");myThread.start();//启动线程,run方法内部自动调用System.out.println("结束");}public void test(){Thread thread = Thread.currentThread();//System.out.println(thread.getName());//线程的名字mainfor(int i = 0;i < 10; i++){//此时线程main在这里出不去了,直到执行完 //线程的名字main System.out.println("nihao"+"线程名字"+thread.getName());}}}//run方法就是线程需要执行的代码class MyThread extends Thread{@Overridepublic void run() {Thread thread = Thread.currentThread();//System.out.println(thread.getName());//线程的名字Thread-0for(int i = 0;i < 10; i++){//线程名字Thread-0System.out.println("nihao"+"线程名字"+thread.getName());}}}
结果:
开始nihao线程名字mainnihao线程名字mainnihao线程名字mainnihao线程名字mainnihao线程名字mainnihao线程名字mainnihao线程名字mainnihao线程名字mainnihao线程名字mainnihao线程名字main结束开始结束nihao线程名字Thread-0nihao线程名字Thread-0nihao线程名字Thread-0nihao线程名字Thread-0nihao线程名字Thread-0nihao线程名字Thread-0nihao线程名字Thread-0nihao线程名字Thread-0nihao线程名字Thread-0nihao线程名字Thread-0
由上可以得出JVM自己创建了线程main(主线程)自动生成,子线程Thread-0,实现的多线程
由于“开始”“结束”是在主线程main中执行,所以打印“结束”就可能在子线程前面执行
5.线程的创建
匿名内部类内重写run方法
Thread t1 = new Thread(){@Overridepublic void run() {//重写方法内容}};t1.start();
继承Thread重写run方法
class MyThread extends Thread{@Overridepublic void run() {}}MyThread myThread = new MyThread();myThread.start();//启动线程,run方法内部自动调用
实现Runnable接口实现run方法
public class TreadTest2 implements Runnable{@Overridepublic void run() {}}Runnable t = new TreadTest2();Thread thread = new Thread(t);thread.start();
0 0
- Java基础/Java多线程
- Java基础-多线程基础篇
- java多线程基础
- Java多线程编程基础
- java多线程开发基础
- Java多线程基础
- Java -- 多线程技术基础
- 【java】多线程基础
- Java基础:多线程
- Java语言基础:多线程
- Java语言基础:多线程
- Java语言基础:多线程
- java多线程基础分析
- Java多线程编程基础
- java 多线程基础
- Java基础_多线程
- Java多线程基础
- java多线程基础
- 高程3笔记2:面向对象1
- [DP 压位] BZOJ 2915 [Poi1997] gen Genotypes
- 奇葩问题001:Idea无法正常编译(代码没有问题)【原因已找到】
- 欢迎使用CSDN-markdown编辑器
- 深入理解ARM的SP LR PC这三个寄存器
- java多线程基础
- 初识php
- Python3用于数据挖掘的相关环境安装搭建
- 【74.89%】【codeforces 551A】GukiZ and Contest
- [hihocoder1049]后序遍历
- Elasticsearch 5.0-基础概念
- Angular2 之 路由与导航
- java 实现两个list交叉循环遍历
- 前向差分(forward difference)