java自定义线程(两种方法)

别再只会用官网例子了!Vxe-Table过滤功能深度自定义:从下拉框到服务端筛选的完整配置流程 本文深入解析Vxe-Table表格组件的过滤功能,从基础UI定制到服务端筛选的完整实现流程。通过实战案例演示如何超越官方示例,实现下拉框、日期范围等复杂过滤交互,并详细讲解混合过滤策略与性能优化技巧,帮助开发者应对大数据量场景下的表格筛选需求。 阅读详情

知识点总结
java中的线程模型:一个虚拟cpu,多个线程
static start方法:启动线程而非运行线程(仅仅告诉虚拟机,该线程已经准备完毕,cup决定线程运行的时刻)
static sleep方法:在制定的毫秒数内让当前正在执行的线程休眠
static yield方法:主动让出cpu,重新排队,正在执行的线程将cpu让给其他具有相同优先级的线程,自己进入就绪状态重新排队
finnal join方法:等待该线程结束

继承一个Thread类

private class MyThread extends Thread{
        /**
         * <p>覆盖的run函数</p>
         * @see java.lang.Thread#run()
         * 实现run方法,安放代码逻辑
         */
        @Override
        public void run() {
            while(true){
                lt=LocalTime.now();
                lab_time.setText(lt.format(formatter));
                try {
//                  milli second 毫秒 1000 milli=1s
                    sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

缺点:无法再继承其他的类,逻辑上既有cpu,又有线程,比较混乱

实现runnable接口

private class MyThread2 implements Runnable{
        /**
         * <p>覆盖的run函数</p>
         * @see java.lang.Thread#run()
         * 实现run方法,安放代码逻辑
         */
        @Override
        public void run() {
            while(true){
                lt=LocalTime.now();
                lab_time.setText(lt.format(formatter));
                try {
//                  静态方法,在某些地方可能受限
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }
    }

调用方法

自定义线程的调用,start():启动线程而非运行线程(仅仅告诉虚拟机,该线程已经准备完毕,cup决定线程运行的时刻)

new MyThread().start();

交替调用两个线程

自定义线程如下:

private class MyThread_run implements Runnable{
        String str;
        public MyThread_run(String str) {
            this.str=str;
        }
        /**
         * <p>覆盖的run函数</p>
         * @see java.lang.Thread#run()
         * 实现run方法,安放代码逻辑
         */
        @Override
        public void run() {
            for (int i = 0; i < 10; i++) {
                System.out.println(Thread.currentThread()+":"+str+"  数字:"+i);

                try {
//                  静态方法,在某些地方可能受限
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }


        }
    }

调用线程,线程交替运行,sleep时间越长越容易看出效果

Thread t1=new Thread(new MyThread_run("t1"));
        Thread t2=new Thread(new MyThread_run("t2"));
        t1.start();
        try {
            t1.sleep(1000);
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        t2.start();

轮流调用两个线程

class TwoThread3 extends Thread {
    static StringBuffer obj=new StringBuffer();
    boolean f=true;
    int mark=0;
    String num;

    public TwoThread3(String num) {
        this.num=num;
    }

    /**
     * <p>
     * 覆盖的run函数
     * </p>
     * 
     * @see java.lang.Thread#run()
     */
    @Override
    public void run() {
        synchronized (obj) {
            if (num.equals("2")&&mark==0) {
                mark=1;
                obj.notify();
                try {
                    obj.wait();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            for (int i = 0; i < 10; i++) {
                obj.append(num);
                System.out.print(num);
                obj.notify();
                try {
                    obj.wait();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }


            }
        }
        save_as_file();
    }
    // 将运行结果写入文件
    public void save_as_file() {
        File file = new File("Result.txt");
        try {
            FileWriter fr = new FileWriter(file);
            BufferedWriter bw = new BufferedWriter(fr);
            bw.write(obj.toString());
            bw.close();
            fr.close();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

public class TwoThread {

    public static void main(String[] args) {
        // 如果线程的对象不一致,则释放出来的锁不是另一个线程希望的锁,为死锁状态
        String s = "";
        new TwoThread3("2").start();
        new TwoThread3("1").start();


    }

}

运行效果:

12121212121212121212

写入文件的内容:

双线程轮流调用

Wider Face+YOLOV7人脸检测 使用Wider Face数据集训练YOLOV7 阅读详情

相关推荐

【蓝牙专题】HCI协议解析

一、概念: 很多人接触蓝牙,是从HCI开始,因为HCI是主机控制接口协议(Host Controller Interface),蓝牙命令通过HCI来发送到Controller; 1、架构 如下图,HCI通过物理接口(USB、UART等)或虚拟接口,传递数据到Controller,Controller也通过同样的接口发送接收数据,这里注意到HCI层是在L2CAP层之下,LMP层之上; HCI

蚂蚁的专栏 5069

java定义一个door的类_自定义事件Java

要实现自定义的事件以及事件处理程序,就必须要实现Java中的事件机制涉及到的三个元素:事件对象、事件源、事件监听器; Java提供了事件对象类的统一基类:java.util.EventObject;它的定义如下: public class EventObject extends Object implements Serializable; 所有的事件状态对象类都要继承这个基类; Java提供了统...

weixin_34911749的博客 565

别再死磕RD算法了!用MATLAB手把手复现SAR后向投影(BP)成像(附完整代码与避坑点)

本文详细介绍了如何使用MATLAB实现合成孔径雷达(SAR)后向投影(BP)成像算法,突破传统RD算法在大斜视和复杂轨迹场景中的局限。通过完整的代码示例和避坑指南,帮助读者掌握BP算法的核心原理、内存优化策略和并行计算技巧,提升SAR成像精度与效率。

weixin_30908103的博客 298

javase:实现线程1

/* 实现线程的第一种方法: 编写一个类,直接继承java.lang.Thread,重写run方法。 */ public class ThreadTest01 { // main方法属于主线程,在主栈中运行。 public static void main(String[] args) { // 新建一个分线程对象 MyThread myThread = new MyThread(); // start()方法的作用是:启动一个.

m0_63834567的博客 113

机器人视觉伺服控制入门:从IBVS到PBVS的实战指南(附Python代码示例)

本文深入解析机器人视觉伺服控制,对比了基于图像的视觉伺服和基于位置的视觉伺服两大核心方法。通过实战案例与Python代码示例,详细阐述了从误差计算、交互矩阵到速度控制的全流程,帮助读者掌握如何利用视觉反馈实现机器人的实时闭环控制,提升其在动态环境中的作业能力。

weixin_29061997的博客 259

选择的 Python 解释器无效,请尝试更改解释器以启用 IntelliSense、Lint 分析和调试等功能。请查看输出,详细了解解释器无效的原因。

摘要:在VS Code中配置Anaconda Python解释器时若出现"解释器无效"错误,可通过修改用户设置解决。具体步骤:1) 按Ctrl+Shift+P打开命令面板;2) 搜索并打开用户设置JSON文件;3) 添加conda路径配置项,示例格式为"python.condaPath": "D:\\Anaconda\\setup\\Scripts\\conda.exe";4) 同时启用环境激活选项"python.terminal.act

猿小白的博客 844

java 定义线程_Java创建自定义线程的两种方式和线程的常用方法API

public class MyThread extends Thread{@Overridepublic void run() {super.run();for (int i =0; i < 50; i++) {System.out.println(i + " B子线程" + getName() + "Thread.activeCount()="+ Thread.activeCount()...

weixin_34245159的博客 129

YOLOv11旋转目标检测详解:从原理到实战的全面指南

本文介绍了YOLOv11旋转目标检测技术的核心概念、架构设计与应用场景。传统目标检测使用水平边界框(AABB)存在背景噪声大、定位精度低等问题,而旋转边界框(OBB)通过引入角度参数显著提升了检测精度,在遥感、OCR、工业质检等领域具有独特优势。YOLOv11-OBB采用改进的多尺度检测层、CSPDarknet53骨干网络和双通道角度输出机制,在保持实时性的同时实现精确的旋转目标检测。实验表明,该方法在DOTA数据集上达到81.3%的mAP,相比传统方法提升显著,特别适合处理具有旋转特性或高宽比悬殊的目标。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 302

JAVA开启线程的四种方法

1,继承Thread类 继承Thread类,重写run方法(不推荐,因为java的单继承局限性) public class ExtendThread extends Thread { /* * 创建步骤如下: * 1,定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务。因此把run方法称为线程执行体。 * 2,创建Thread子类了的实例,即创建线程对象。本实例中是new一个ExtendThread,即可创建线程对

万物不及香香的博客 1万+

使用 syncstart 实现同场景下多个音视频音轨自动化同步

如果需要在视频编辑中同步多个机位的音轨,使得相同的视频能够同时播放,手动操作可能会变得相当复杂。特别是当处理多个视频文件时,例如有10个视频需要互相匹配,实现一对多的同步关系,这就涉及到为每对视频生成匹配的音轨数据。手动完成这样的任务,如生成90套对应的音轨数据,不仅耗时而且容易出错。因此,使用脚本自动化这一过程是一个更为高效和准确的解决方案。通过编写脚本,您可以批量处理多个视频文件,自动同步它们的音轨,大大简化了音视频编辑的工作流程,并确保了同步的准确性。

Mr数据杨 1076

038、OIS 光学防抖原理与调试:陀螺仪数据融合、Lens Shift OIS 的闭环控制

本文分享了OIS光学防抖系统的调试经验和关键技术要点。作者通过一个"呼吸感"Bug案例,揭示了陀螺仪数据融合和闭环控制的重要性。系统介绍了OIS的三个关键层次:传感器层(陀螺仪特性)、控制层(复合算法)和执行层(闭环控制)。重点讲解了陀螺仪数据融合的互补滤波实现、Lens Shift闭环控制的PID优化策略(包括积分抗饱和和微分滤波),以及前馈补偿的应用。最后总结了调试中的关键问题:数据同步、霍尔校准、温度补偿和性能评估方法,并给出实用建议:平衡算法复杂度与性能、预留带宽余量、重视产线校准等。文章强调OIS

sundong_81的博客 262

java在方法中怎么创建线程_Java创建线程的三种方式

在Java中提供了3种创建线程的方法:1、通过实现Runnable接口2、通过继承Thread类本身3、通过Callable或者Future创建线程实现Runnable接口创建线程类1、定义Runnable接口的实现类,重写run()方法2、创建Runnable实现类的实例,并以此作为Thread的target来创建对象,该对象才是真正的线程对象。package duoxiancheng;publ...

weixin_30481539的博客 874

Pytorch入门教程

Pytorch学习总结:1.张量Tensor 张量是一种特殊的数据结构,与数组和矩阵非常相似。在PyTorch中,我们使用张量对模型的输入和输出以及模型的参数进行编码。 张量类似于NumPy的ndarray,除了张量可以在 GPU 或其他硬件加速器上运行。事实上,张量和NumPy数组通常可以共享相同的底层内存,从而无需复制数据。...

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 4万+

[Java多线程] 创建、使用自定义线程的两种方法

目录[Java多线程] 创建、使用自定义线程的两种常用方法方法一:继承Thread类方法二:实现Runnable接口 [Java多线程] 创建、使用自定义线程的两种常用方法 总结一下Java中自定义线程的创建与使用的两种常用方法。 这里通过实现一个最简洁的自定义Thread类——Morty类,以及测试主函数main来展示效果。 方法一:继承Thread类 最为简单直接的方法是继承Thread类。只需要实现Thread类所要求的run函数就够了。 优点:清晰,方式直接。 缺点:Java中仅能继承一个类,使用

Xav Pun的博客 514

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

黑马程序员--Java学习笔记之多线程(自定义线程的两种方式对比、线程状态、线程安全)

一、基本定义 进程:进程是一个正在执行的程序。每一个进程执行都有一个执行顺序。该顺序是一个执行路径,或者叫控制单元换。 线程:进程中的一个独立的控制单元。 二、自定义线程的两种方法 第一种:继承Tread类。步骤如下: (1)定义继承Tread类的子类; (2)覆写run()方法; (3)声明子类对象,并调用start()方法。 注:start()方法有两个作用:启动线程、调用ru

u011746071的专栏 990

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

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

Java多线程和自定义线程池

Java多线程是指在一个Java程序中同时运行多个线程,每个线程可以独立执行不同的任务,从而提高程序的效率和响应速度。线程是操作系统调度的最小单位,包含在进程中。Java多线程编程可以充分利用多核处理器的计算能力,实现并发执行。并发指多个指令在单个CPU上交替执行,而并行指多个指令在多个CPU上同时执行。Java中实现多线程的三种方法包括继承Thread类、实现Runnable接口和实现Callable接口。多线程编程中常见的问题包括线程安全,可以通过同步代码块或Lock锁来解决。线程的生命周期包括新建、就

likenuo1016的博客 1098

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

java中自定义线程的方式

自定义线程的方式一 步骤: 自定义一个类继承Thread类 重写Thread类的run方法,把自定义线程的任务代码写在run方法中 创建Thread类的子类对象,并且调用start方法开启线程 疑问:重写run方法的目的是什么? ​每个线程都有自己的任务代码,jvm创建的主线程的任务代码就是main方法中的所有代码,而自定义线程的任务代码就写在run方法中,自定义线程负责了run方法中的代码。...

shui_zhong_yue的博客 1366

实现多线程的两种方式

1、如何在自定义的代码中,自定义一个线程呢? 通过对api的查找,java已经对线程这类事物的描述,就是Thread类 创建线程的第一种方式:继承Thread类 步骤: 1、定义类继承Thread 2、复写Thread类的run方法    目的:将自定义代码存储在run方法中,让线程运行 3、调用线程的start方法,    该方法有两个作用,一是启动线程,一是调用run方

qq_26652705的博客 927

Java创建线程的两种方式

1.继承Thread类创建线程 因为使用此方法创建线程类,此线程类需要继承 Thread类并重写 Thead类的un()方法因为 Tivend类的n()方法是线程要执行操作任务的方法,所以线程要执行的操作代码都需要写在run()方法中,并通过调用 start()方法启动线程后调用 下面来编写代码,用继承 Tead类的方式创建线程在线程中输出1100的整数可参考以下步骤 (1)定义 My Threa...

Pony_stark的博客 308

【Java基础知识】实现多线程的两种方式

1.继承Thread类,重写run()方法 Thread本质上也是实现了Runnable接口的一个实例,他代表一个线程实例,并且,启动线程的唯一方法就是通过Thread类的start()方法。start()方法是一个本地方法,它将启动一个新的线程,并执行run()方法(Thread中提供的run()方法是一个空方法)这种方式通过自定义直接extend Thread,并重写run()方法,就可以启动...

Moo_Lavender的博客 1560

线程池(java)

上述的线程池工具类并不能更细致的控制线程的各类参数,比如阻塞队列中等待任务的最大值,最大线程数等。自定义线程池可以实现更细致的参数控制。自定义线程池方法:corePoolSize, // 核心线程池大小,线程池中最少会保持这个数量的线程maximumPoolSize, // 最大线程池大小,线程池中最多会允许创建这么多线程keepAliveTime, // 空闲线程在终止前保持的时间,超过这个时间没有被使用的线程会被终止unit, // 过期时间的单位,使用TimeUnit控制。

m0_55871674的博客 733

java中实现多线程的两种方法的区别

java中实现多线程的两种方法: 1.zi

liumin1022的专栏 517

简单模拟Java中创建多线程的两种方法

 【文章标题】简单模拟Java中创建多线程的两种方法【文章作者】曾健生【作者邮箱】zengjiansheng1@126.com【作者QQ】190678908【作者博客】http://blog.youkuaiyun.com/newjueqi【编程环境】JDK 1.6.0_01【作者声明】欢迎转载文章,但转载请保留文章的完整性以及注明文章的出处。 *****************

曾健生的专栏 2506

java 获取子线程_Java 主线程获取子线程返回结果

1.自定义package com.jgyang.com;public class MySyncThreadTest {public static void main(String[] args) throws Exception {CustomRunnable cRunnacle = new CustomRunnable();Thread thread = new Thread(cRunnacle...

weixin_39547596的博客 1353

线程创建的两种方式(Thread和Runnable)

1.继承 Thread类 1)自定义一个类,该类继承Thread类 2)重写run()方法 3)在主线程中创建该类的子类对象 ` 4)调用start()方法(启动线程) /* * 分析: * 1.继承 Thread类 * 1)自定义一个类,该类继承Thread类 * 2)重写run()方法 * 3)在主线程中创建该类的子类对象 * ` 4)启动线程(调用start()方法) * 2 * */ public class TwoWaysToCreateThreads { publi

weixin_48340270的博客 331

安全的终止线程的两种方法

过期的suspend()、resume()、stop() 不建议使用这三个函数来停止线程,以suspend()方法为例,在调用后,线程不会释放已经占有的资源(比如锁),而是占有着资源进入睡眠状态,这样容易引起死锁问题。同样,stop()方法在终结一个线程是不会保证线程的资源正常释放,通常识没有给予线程完成资源释放工作的机会,因此会导致程序可能工作在不确定的状态下。 两种安全终止线程的方法...

baifeng6803的博客 208
上一篇: 当Android开发遇到菜单
下一篇: Android simpleAdapter使用方法--实现消息列表
Julse
博客等级 码龄10年 58粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值