欢迎使用CSDN-markdown编辑器
来源:互联网 发布:太平洋寿险软件下载 编辑:程序博客网 时间:2024/05/17 08:22
个人博客地址,
java多线程
(一)进程
进程:正在进行中的程序(直译).
(二)线程
线程:就是进程中一个负责程序执行的控制单元(执行路径)一个进程中可以多执行路径,称之为多线程。 一个进程中至少要有一个线程。
开启多个线程是为了同时运行多部分代码。
每一个线程都有自己运行的内容。这个内容可以称为线程要执行的任务。
多线程好处:解决了多部分同时运行的问题。
多线程的弊端:线程太多回导致效率的降低。
其实应用程序的执行都是cpu在做着快速的切换完成的。这个切换是随机的。
JVM启动时就启动了多个线程,至少有两个线程可以分析的出来。
1.执行main函数的线程,
该线程的任务代码都定义在main函数中。
2负责垃圾回收的线程。
如何创建一个线程呢?
创建线程方式一:继承Thread类。
步骤:
1. 定义一个类继承Thread类。
1. 覆盖Thread类中的run方法。
1. 直接创建Thread的子类对象创建线程。
1. 调用start方法开启线程并调用线程的任务run方法执行。
1. 调用run()方法
代码:
class ThreadDemo1 {public static void main(String[] args) {Thread1 t1 = new Thread1("小明");Thread1 t2 = new Thread1("xiango");t1.run();t2.run();}}class Thread1 extends Thread{private String name;Thread1(String name){this.name=name;}void show(){for (int i=0;i<10 ;i++ ) {System.out.println(name+"isrunning"+i);}}public void run(){show();}}class Thread2 extends Thread{private String name;Thread2(String name){this.name=name;}void show(){for (int i = 0;i<10 ;i++ ) {System.out.println(name+"............"+"isrunning"+i);}}public void run(){show();}}
运行结果
小明isrunning0小明isrunning1小明isrunning2小明isrunning3小明isrunning4小明isrunning5小明isrunning6小明isrunning7小明isrunning8小明isrunning9xiangoisrunning0xiangoisrunning1xiangoisrunning2xiangoisrunning3xiangoisrunning4xiangoisrunning5xiangoisrunning6xiangoisrunning7xiangoisrunning8
可以看到并没有随机执行,而是单个线程执行
那么如何实现真正意义上的多线程呢?
答案是调用start方法
2. 调用start()方法
java API 文档说明
startpublic void start()使该线程开始执行;Java 虚拟机调用该线程的 run 方法。结果是两个线程并发地运行;当前线程(从调用返回给 start 方法)和另一个线程(执行其 run 方法)。多次启动一个线程是非法的。特别是当线程已经结束执行后,不能再重新启动。
将
t1.run(); t2.run();
改为
t1.start(); t2.start();
结果为
xiangoisrunning0小明isrunning0小明isrunning1小明isrunning2小明isrunning3xiangoisrunning1小明isrunning4xiangoisrunning2小明isrunning5xiangoisrunning3小明isrunning6xiangoisrunning4小明isrunning7xiangoisrunning5小明isrunning8xiangoisrunning6小明isrunning9xiangoisrunning7xiangoisrunning8xiangoisrunning9
3. 获取线程名称
可以通过Thread的getName获取线程的名称 Thread-编号(从0开始)
主线程的名字就叫做main.
class ThreadDemo1 { public static void main(String[] args) { Thread1 t1 = new Thread1("小明"); Thread1 t2 = new Thread1("xiango"); t1.start(); t2.start(); System.out.println("这是主线程"+Thread.currentThread().getName()); }}class Thread1 extends Thread{ private String name; Thread1(String name){ this.name=name; } void show(){ for (int i=0;i<10 ;i++ ) { System.out.println(name+"isrunning"+i+getName()); } } public void run(){ show(); }}class Thread2 extends Thread{ private String name; Thread2(String name){ this.name=name; } void show(){ for (int i = 0;i<10 ;i++ ) { System.out.println(name+"............"+"isrunning"+i+getName()); } } public void run(){ show(); }}
运行结果
这是主线程main小明isrunning0Thread-0小明isrunning1Thread-0小明isrunning2Thread-0小明isrunning3Thread-0小明isrunning4Thread-0小明isrunning5Thread-0小明isrunning6Thread-0xiangoisrunning0Thread-1xiangoisrunning1Thread-1xiangoisrunning2Thread-1小明isrunning7Thread-0小明isrunning8Thread-0小明isrunning9Thread-0xiangoisrunning3Thread-1xiangoisrunning4Thread-1xiangoisrunning5Thread-1xiangoisrunning6Thread-1xiangoisrunning7Thread-1xiangoisrunning8Thread-1xiangoisrunning9Thread-1
阅读全文
0 0
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- (C++)UrlEncode的标准实现
- css3 skew坐标轴笔记
- Python2下载单个网页
- 从并发编程角度看Java内存模型
- python爬虫之壁纸的下载
- 欢迎使用CSDN-markdown编辑器
- Andrew Ng 的 Deep Learning 教程翻译
- bzoj 2555: SubString
- 第一天申请,看是使用
- maven 创建多模块备忘(2)之整合ssm
- 如何查看mysql数据库中各个表的大小
- 【数据结构和算法】Day 7
- 我必须得告诉大家的MySQL优化原理
- 垃圾收集器与内存分配策略