Java学习笔记21(线程)

news/2024/7/3 12:52:06 标签: java, 多线程, 设计模式, 多态, jvm

创建线程的方式

继承Thread类

  1. 定义子类继承Thread类。
  2. 子类中重写Thread类中的run方法。
  3. 创建Thread子类对象,即创建了线程对象。
  4. 调用线程对象start方法:启动线程,调用run方法。
    run(),想要开启多线程中运行代码逻辑,就写到run()方法里面。
    start()用来启动线程,本质上是从run开始的。

TestThread,java

java">/**
 * 实现多线程
 * @author jkjkjk
 *
 */
public class TestThread extends Thread {
	@Override
	public void run() {
		// TODO Auto-generated method stub
		System.out.println("run了");
		for(int i = 0; i<5;i++) {
			System.out.println("runxxxx"+i);
		}
	}

}

Test.java

java">public class Test {
	public static void main(String[] args) {
		Thread t0 = new TestThread();//多态
		t0.start();//启动线程,开始运行run里面的东西
		System.out.println("-------------1");
		System.out.println("-------------2");
		System.out.println("-------------3");
	}

}

运行结果:

java">-------------1
-------------2
run了
-------------3
runxxxx0
runxxxx1
runxxxx2
runxxxx3
runxxxx4

/**
* 多次运行这个main方法之后
* 我们发现main方法中打印的3行与开启线程运行run方法中的打印语句是混合起来
* 而且main方法中的打印与run方法中打印语句顺序是不固定的
* 为什么呢?
* main执行t0.start()方法开启多线程之后,就相当于在main方法之外开启一个支流
* 这个个时候t0.start()的之后的main方法的其他代码的运行就与run方法运行无关了
* 以当前代码为例
* t0.start()的之后的main方法的其他代码与run方法的代码并行运行
* 就像两条河流一样,各走各的
* 那么控制台输出的结果就是两条并行程序的运行结果总和,这个结果需要拆开成两部分看
* 就可以看到,各自是保持自己输出顺序
* 这个就是多线程的异步,这个异步相对于执行t0.start()的主程序来说的
* 简单来说开启了线程之后run方法中运行的代码主程序中t0.start()之后的程序是并行执行的,没先后关系,这个叫异步
*/

实现Runnable接口

1)定义子类,实现Runnable接口。
2)子类中重写Runnable接口中的run方法。
3)通过Thread类含参构造器创建线程对象。
4)将Runnable接口的子类对象作为实际参数传递给
Thread类的构造方法中。
5)调用Thread类的start方法:开启线程,调用
Runnable子类接口的run方法。

TestRunnable.java

java">public class TestRunnable implements Runnable{

	@Override
	public void run() {
		// TODO Auto-generated method stub
		System.out.println(Thread.currentThread().getName() + "接口里面的run---");
	}
	

}

Test1.java

java">public class Test1 {
	public static void main(String[] args) {
		
//		Thread t = new Thread(new TestRunnable());
//		t.start();
		
		Thread t1 = new Thread(new TestRunnable(), "t-1");//匿名对象
		t1.start();
		Thread t2 = new Thread(new TestRunnable(), "t-2");//
		t2.start();
		//和一种一样
		Runnable r = new TestRunnable();
		Thread t3 = new Thread(r, "t-3");//通过Thread类含参构造器创建线程对象
		t3.start();


		
		System.out.println("-------------1");
		System.out.println("-------------2");
		System.out.println("-------------3");
	}

}

继承Thread: 线程代码存放Thread子类run方法中。重写run方法
实现Runnable:线程代码存在接口的子类的run方法。实现run方法

在这里插入图片描述

避免了单继承的局限性
多个线程可以共享同一个接口实现类的对象,非常适合多个相同线程来处理同一份资源

多线程程序的优点

提高应用程序的响应。对图形化界面更有意义,可增强用户体验。
提高计算机系统CPU的利用率
改善程序结构。将既长又复杂的进程分为多个线程,独立运行,利于理解和修改

Thread类的有关方法(1)

void start(): 启动线程,并执行对象的run()方法
run(): 线程在被调度时执行的操作
String getName(): 返回线程的名称
void setName(String name):设置该线程名称
static currentThread(): 返回当前线程
t0.setName(“线程t-0”);//设置线程的名称
t1.setName(“线程t-1”);//设置线程的名称

线程的生命周期:

在这里插入图片描述

在这里插入图片描述


http://www.niftyadmin.cn/n/1707585.html

相关文章

java抽象类扩展_用Java中的抽象类扩展抽象类

java抽象类扩展示例问题 当我创建Java :: Geci抽象类AbstractFieldsGenerator和AbstractFilteredFieldsGenerator我遇到了一个不太复杂的设计问题。 我想强调一下&#xff0c;对于某些人来说&#xff0c;这个问题和设计可能看起来很明显&#xff0c;但是在我最近与一位初级开发…

JavaSE自学笔记总结

文章目录前言00零基础内容01基础程序设计部分&#xff1a;02面向对象编程03Java新特性04应用程序开发前言 学了Java基础部分大概一个月&#xff0c;基本概念语法学完了&#xff0c;看了一下&#xff0c;距离上一篇博客有10天了&#xff0c;前几天偷懒了&#xff0c;没及时总结…

如何选择低代码开发平台?

2021年初&#xff0c;钉钉带爆火低代码&#xff0c;而在低代码受欢迎的与此同时&#xff0c;随之而来也产生了行业乱象&#xff0c;这大半年至今&#xff0c;我见到许多企业&#xff0c;都自称为自身是低代码&#xff0c;乃至随意一个软件企业都说自身是低代码&#xff0c;这就…

lombok插件安装_使用var,Lombok和Fluxtion轻松处理事件

lombok插件安装介绍 在本文中&#xff0c;我将结合使用Lombok和Fluxtion这两种产品&#xff0c;以演示工具如何在减少代码编写和交付时间的同时提高代码的可读性。 使用Java 10中的var可以进一步改善这种情况。 产品和var都在构建时使用推断来加速开发。 Fluxtion的精神是最大程…

数据结构Java版(数组模拟栈)

用数组模拟战最核心的是出栈和入栈。 用变量top表示栈顶&#xff0c; 入栈 top; stack[top ] value; 出栈 需要先将栈顶数据保存包变量value中&#xff0c;然后返回value int value stack[top]; top–; return value;//关键返回value&#xff0c;对应的是int 看代码&#xf…

selenium_使用Selenium WebDriver测试自动化的22条实用技巧

selenium使用Selenium进行测试自动化已使全球的网站测试人员能够轻松执行自动化的网站测试。 Webdriver是Selenium框架的核心组件&#xff0c;通过它您可以针对不同类型的浏览器(例如Google Chrome&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Opera&#xff0c;…

如何删除干净MySQL,删除彻底!

之前安装过&#xff0c;如何没有删除感觉&#xff0c;导致下次怎么也安装不成功&#xff0c;明明卸载了&#xff0c;为什么还是没有卸载干净呢&#xff1f; 默认安装路径 C:\Program Files\MySQL 这个要删除 这个也是默认安装好自带的数据。这个要删除&#xff0c;才算删除彻…

百数云,比Excel更适合销售的表格管理工具

对做销售的小伙伴们而言&#xff0c;平常免不了要搜集一些客户数据、储存一些项目材料、不断查看产品信息等难题。该类材料较多时&#xff0c;就必须好几个 Excel 文档来纪录&#xff0c;又经常担忧因储存不合理而遗失&#xff0c;而且使用并不方便&#xff0c;尤其有时候需要在…