java线程的基本应用

PINN内嵌物理知识神经网络入门及文献总结 内嵌物理知识深度学习方法(PINN)已经成功用于解决各类科学计算问题,其本质是将物理先验知识嵌入神经网络训练中,将一个求解PDE的问题转化为一个优化问题。这篇博客主要记录PINN相关论文 阅读详情
     要了解线程,先要了解进程。简单的理解,进程就是一个正在执行的程序。而一个进程可能执行着多条线程,比如一个下载软件正在下一个文件,它可能把文件分为几个部分,每一部分又分配一个线程负责下载。又比如,一台电脑,同时运行着浏览器,QQ,播放器等等好多应用程序,也是通过一个个线程来完成的。
     那么线程是否是同时运行的吗?不是的,一个CPU,在同一个时间只能做一件事,只是它比较三心二意,一下子处理浏览器,一下子又去处理QQ,只是由于它的处理速度极快,使得所有应用程序的动作好像连贯一般。而且线程有个优先级,谁的优先级高一点,cpu就对谁好一点。该线程被执行到的概率就大一点,但并不表示优先级低的线程不会被执行到。
     说了这么多,那么如何实现应用程序的多线程呢?
     方法一、直接继承Thread类,重写run()。
 public class MyThread extends Thread { 
               public void run(){
                    ....    //要在线程里运行的代码  
               }
          }

     方法二、实现Runnable接口。
      public class MyThread implements Runnable {
               public void run(){
                    ...     //要在线程里运行的代码     
               }
          }
          

     其实这两种方法的本质是一样的,都是要实现Runnable接口,察看Thread类的源码就可得知,Thread类本身就是实现了Runnable接口。最主要的一点是,无论用什么方法,我们都是在它们的run()方法中执行我们的代码。
     
     首先了解一下线程常用的方法。
     start()   开始运行线程。
     run()   线程要执行的代码。
     sleep(long millis)  让线程睡眼millis毫秒时间,时间到后,线程重新进行就绪状态(并非马上开始)
     yield()  线程让步,线程让出cpu,重新进入就绪状态
     wait()   让线程暂停,谁来让它重新开始呢?参考notify(),notifyAll();
     notify()   唤醒正在wait的线程,如果同时有多个线程在wait状态,则任意唤醒一个。
     notifyAll()  唤醒正在wait的所有线程。
     join()  线程在扫行的过程中,让其它线程加入执行后自己才执行。   

首先看一个例子:
public class ThreadTest extends Thread {

	public static void main(String[] args) {
		//主线程开始
		System.out.println("主线程开始。。。。。");
		//子线程开始
		new ThreadTest().start();
		
		//在主线程运行一此代码
		Thread t = Thread.currentThread();
		for(int i=0; i<10; i++){
			System.out.println("我是"+t.getName()+",我的id是"+t.getId());
		}
	}
	
	@Override  //在子线程中执行的代码
	public void run() {
		Thread t = Thread.currentThread();
		for(int i=0; i<10; i++){
			System.out.println("我是"+t.getName()+",我的id是"+t.getId());
		}
	}
}

运行的结果是不唯一的,多个线程执行,每时每刻线程都在抢着工作,抢一点工作一点,直到线程结束为止。那么线程什么时候算是停止了呢?这要了解一下线程的生命周期。
1、创建完一个线程对象后,线程并未开始,此时处于初始化新建状态。
2、当线程调用start()方法后,线程处于就绪状态,但并没有开始执行run()方法的内容。
3、当线程抢到cpu后,则就开始执行run()方法,处于运行状态。
4、当线程调用了sleep(),wait(),或者阻塞式的io方法,处于阻塞状态。
5、当线程执行完run()方法后,或者发生异常,应该说是未捕获的异常,则线程处于死亡状态。

下面是一个让方块在窗口内移动的例子,大家看一下多线程的使用。
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MovingRect extends JPanel implements Runnable {
	private int x = 10;
	private int y = 10;

	public static void main(String[] args) {
		//设置窗口属性。
		JFrame frame = new JFrame();
		frame.setSize(800, 600);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocation(250, 50);
		frame.add(new MovingRect());
		frame.setVisible(true);
	}

	public MovingRect() {
		//设置面板属性
		this.setSize(800, 600);
		this.setLocation(10, 10);
		
		//创建子线程,并让它进入就绪状态。
		Thread t = new Thread(this);
		t.start();
		
		this.setVisible(true);
	}
	
	@Override
	public void paint(Graphics g) {
		super.paint(g);
		Color c = g.getColor();
		g.setColor(Color.RED);
		//画一个方块
		g.fillRect(x, y, 15, 15);
		g.setColor(c);
	}
	
	//子线程要做的就是更改方块的位置坐标,并刷新。
	public void run() {
		while (true) {
			this.x += 8;
			this.y += 6;
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			this.repaint();
		}
	}
}




使用Simulink进行基于IIR滤波器的设计与稳定性分析仿真 IIR滤波器的稳定性与其系统函数的极点位置密切相关。如果所有极点都位于Z平面的单位圆内,则该滤波器是稳定的;否则,滤波器将是不稳定的。在设计IIR滤波器时,确保其稳定性对于避免输出信号发散至关重要。明确你的系统需求,比如输入信号类型(如正弦波)、采样率、IIR滤波器的设计参数(如滤波器类型、阶数、截止频率等)。假设我们需要设计一个低通IIR滤波器,用来去除高于500Hz的所有频率成分,保留低于500Hz的信号成分。采样率为8kHz。 阅读详情

相关推荐

实战解析:利用Python requests库高效抓取京东商品评论并构建结构化数据集

本文详细介绍了如何利用Python requests库高效抓取京东商品评论并构建结构化数据集。通过分析京东评论接口、处理反爬机制以及数据解析存储,帮助开发者快速获取电商数据,适用于竞品监控、用户画像构建等商业场景。

weixin_42526415的博客 837

Java 线程的使用

尚硅谷学习笔记

weixin_53472653的博客 3654

无人机多旋翼倾转动力测试系统-适用于(eVTOL开发、缩比模型测试、科研教育)

LY-QZ-F4多旋翼倾转动力测试系统是全球首款专为倾转四旋翼设计的多自由度动力测试平台,融合高精度传感、动态倾转模拟与智能工况分析,为下一代eVTOL技术提供全维度验证工具。采用航空级应变传感器(精度±0.1% FS),同步捕获推力、扭矩、俯仰/滚转力矩,动态误差<1%。同时测试电驱动系统(单轴最大150kW)与混合动力单元(增程式),支持高压(800V)平台。通过MET数据采集软件,控制采集一体化,定制化,实时观察上百个传感器数据,实时更改测试需求。可搭配六维姿态平台,温湿度舱、振动台等环境模拟设备。

weixin_49209795的博客 874

Java—线程基本使用

Thread基本使用

qq_34577961的博客 385

ESP32-C3芯片通过蓝牙控制开锁功能

定义BLE服务和特征,用于接收开锁命令。0x00FF// 服务UUID0xFF01// 特征UUID4// 句柄数量// 特征值// 特征属性// 处理GATT服务器事件// 处理事件(详细代码见下文)// 注册GATT回调if (ret) {return;// 创建GATT服务器。

m0_46145044的博客 921

抖音X-Medusa风控逆向:unidbg环境重建与魔改AES还原

X-Medusa并非传统加密算法,而是深度耦合运行时环境的动态混淆系统,其核心是硬件指纹感知、线程上下文绑定与非标AES变异。理解其原理需跳出‘找密钥’思维,转向对CPU型号、系统属性、微秒级时间及内存布局的综合建模。技术价值在于将不可控的客户端风控,转化为可复现、可配置、可运维的服务化能力;典型应用场景包括合规数据采集、API协议适配与移动安全研究。本文聚焦Android native层逆向实践,基于unidbg实现高保真环境模拟,并完整还原S-Box动态生成、MixColumns矩阵变异与轮密钥XOR扰

weixin_33783283的博客 685

【Java基础-49】Java线程池及其基本应用详解

线程池是一种多线程处理形式,它预先创建一组线程,并将任务提交给这些线程执行。线程池中的线程可以重复使用,从而避免了频繁创建和销毁线程的开销。线程池是Java多线程编程中的重要工具,它能够有效地管理线程资源,提高系统的性能和稳定性。通过本文的介绍,我们了解了线程池的基本概念、工作原理、常见类型以及基本应用。掌握线程池的使用,可以帮助我们编写出更加高效、可靠的多线程程序。在实际开发中,应根据具体需求选择合适的线程池类型,并合理配置线程池参数,以达到最佳的性能表现。希望本文对你理解和使用Java线程池有所帮助。

weixin_39033358的博客 914

图像增强算法:基于Retinex的图像增强算法

该算法对图像的亮度和颜色进行分离处理,然后通过调整它们的比例来提高图像的质量。滤波后的图像将保留颜色信息,并减少图像中的噪声。接下来,Retinex算法使用一个高通滤波器对原始图像进行滤波处理,以增强图像中的亮度信息。通过使用Retinex增强算法,我们可以有效地提高图像的质量,增强图像中的细节和颜色信息。最后,Retinex算法通过将颜色恢复和亮度调整后的图像进行比例调整,以获得最终的增强图像。Retinex算法是一种常用的图像增强算法,它通过对图像的亮度和颜色进行调整,以提高图像的视觉质量。

XsiJava的博客 436

java 线程、线程池基本应用示例代码回顾

java 线程、线程池基本应用示例代码回顾

偏执狂才能生存!热忱比专业知识更重要......... 993

Flow Matching03-01:微分方程【微分方程(描述变化规律的方程):包含未知函数和它的导数的方程】【公式解(精确)、数值解(逼近)】

好的,我将从数学角度详细解释Flow Matching,从高中生能理解的基础知识开始,逐步深入到高级概念。

u013250861的博客 219

R语言中的summarise函数和mutate函数用于计算分组占比。下面是关于这两个函数的详细介绍以及相应的源代码示例:

R语言中的summarise函数和mutate函数用于计算分组占比。

CodeByte的博客 1183

java 线程、线程池基本应用演示样例代码回想

java 线程、线程池基本应用演示样例代码回想 package org.rui.thread; /** * 定义任务 * * @author lenovo * */ public class LiftOff implements Runnable { protected int countDown=10; private static int taskCount=0...

weixin_30472035的博客 66

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

java的线程与线程的基本应用

**什么是线程:**在一个程序中,能够独立运行的程序片段叫做“线程”,利用它进行编写的程序叫做多线程处理程序。通常情况下,多线程程序能够更好低利用计算机资源,提高程序执行的效率。多线程编程具有重要的意义,每个程序员都应该掌握。 **举例说明:**一做雪糕的工厂(雪糕厂相当于cpu,负责资源的调配),能做出小布丁和绿色心情。但是,由于工厂电力系统原因,只能开一条生产线。(两条生产线相当于两个进程)现在我们开始做小布丁,小布丁生产线上的员工,就相当于一个线程。一个进程里面至少包涵一个线程。而一个进程,可以为我们

weixin_45836359的博客 162

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

[JAVA]初识线程池及其基本应用

在Java并发包中一个最核心的组件是线程池 ,在了解线程池之前,我们需要知道Runnable接口的弊端。

2301_79757798的博客 754

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

java多线程2——线程的基本应用

线程名称:     在Thread类中,可以通过getName()方法取得线程名称,通过setName()方法设置线程名称 可以通过currenThread()方法取得当前线程的对象 取得当前线程名称: T    hread.CurrentThread().getName(); java程序执行,至少启动两个线程:主线程,GC(垃圾回收机制) 判断线程是

elvinmuyu的专栏 549

Java高级编程——多线程(基本概念+线程的创建及应用)

目录1、基本概念:程序、进程、线程1.1程序(program)1.2进程(process)1.3线程(thread)1.4并行与并发并行并发1.5使用多线程的优点1.6多线程的应用场景2、线程的创建和应用(重点)2.1java.lang.Thread2.1.1通过继承Thread创建线程2.1.2创建过程中的两个问题2.1.2.1问题一:不能直接调用run()方法来执行线程2.1.2.2 问题二:不能对同一线程执行两次start()2.1.3 创建Thread的匿名子类2.1.4Thread的常用方法se

ou_yang_mu_ling的博客 1220

JAVA 两种多线程基本方法应用

JAVA 两种多线程方法应用Runnable:先实现接口 重写run方法 后用Thread对象的start()方法启动Runnable:匿名内部类 : 直接写入方法Thread :先继承 后重写方法 在对象中调用start()直接启动Thread:匿名内部类设置/获取当前线程的名字:线程休眠 sleep方法 JAVAde 多线程方法有两种实现 Runnable 接口 和 Thread 继承类...

xiaohongIT的博客 261

group by 怎么用java对象接收_Java线程生命周期和Java应用中基本线程

Java 线程生命周期的不同状态在Java 5 以后,线程状态被明确定义在其公共内部枚举类型 java.lang.Thread.State 中。新建(NEW),表示线程被创建处理还没有真正启动的状态,可以认为它是一个Java 内部状态。就绪(RUNNABLE),表示该线程已经在JVM 中执行,当然由于执行需要计算资源,它可能是正在运行,也可能还在等待系统分配给它CPU 片段,在就绪队列里面排队。阻...

weixin_34526733的博客 267

c++ 等待子线程结束_Java线程生命周期和Java应用中基本线程

Java 线程生命周期的不同状态在Java 5 以后,线程状态被明确定义在其公共内部枚举类型 java.lang.Thread.State 中。新建(NEW),表示线程被创建处理还没有真正启动的状态,可以认为它是一个Java 内部状态。就绪(RUNNABLE),表示该线程已经在JVM 中执行,当然由于执行需要计算资源,它可能是正在运行,也可能还在等待系统分配给它CPU 片段,在就绪队列里面排队。阻...

weixin_39618456的博客 112

Java同步和多线程1:多线程的基本操作及synchronized的应用

其实Java多线程中,锁只是一个很抽象的概念。锁是为了实现互斥和同步而设的。“锁”打个比方,获取锁可认为是“获取做某个事情的权限”,而“释放锁”可以认为是把做某件事情的权限交给别人了。也可以这样认为,“锁”锁住的是某个事物。获取锁指的是获得解开这个锁的钥匙,可以对这个事情进行操作,而释放锁是把这条钥匙给别人,或者放回某个钥匙柜子里,等别人来取。Java中锁的机制,是为了在多线程中实现同步互斥。如果...

Gensoukyo 1636

线程的概念及基本应用

interrupt() 是给线程设置中断标志interrupted() 是检测中断并清除中断状态isInterrupted() 只检测中断。还有一点就是interrupted()作用于当前线程和作用于此线程,即代码中调用此方法的实例所代表的线程。

loushaoqi的博客 1017

Java多线程:进程与线程的应用和操作

通过本文的介绍,我们深入了解了 Java 中的多线程、进程与线程的概念,以及它们在实际编程中的应用和操作。在多线程编程中,合理使用线程同步机制,可以避免线程安全问题,提升程序的并发性能。希望本文的内容能够帮助你在 Java 编程中更好地理解和应用多线程技术。

C_V_Better的博客 805

Java线程池应用实例

线程池是多线程的一种处理方式,处理过程中将任务添加到队列中,线程创建完成后自动启动这些任务,任务就是实现了Runnable或Callable接口的实例对象。可以根据系统需求和硬件环境灵活控制线程的数量,对线程进行统一管理。3、12306网上购票。

Rsun2018的博客 6157

【从0到1学习Java线程池】Java线程池的简介以及使用

这是【从0到1学习Java线程池】系列文章的第 壹 篇,该系列文章总共三篇,介绍了 Java 线程池的使用以及原理,并且最后会实现一个基本的线程池。本篇文章主要介绍了 Java 线程池以及它的使用。

远航 | FIBOS.io 3785

【Java】线程基本使用——实现 Runnable接口

实现 Runnable 接口 说明 java是单继承的,在某些情况下一个类可能已经继承了某个父类,这时在用继承Thread类方法来创建线程显然不可能了。 java设计者们提供了另外一个方式创建线程,就是通过实现Runnable接口来创建线程 应用案例 请编写程序,该程序可以每隔1秒。在控制台输出“hi!”,当输出10次后,自动退出。 请使用实现Runnable接口的方式实现。这里底层使用了设计模式【代理模式】=> 代码模拟实现Runnable接口 开发线程的机制。 ...

兮动人 2万+

Java-多线程基本知识学习总结

Java多线程基本知识

Lion__king的博客 1361
上一篇: 各种排序的优缺点
下一篇: java实现多线程下载技术
Sweeter
博客等级 码龄14年 81粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值