java线程——什么是线程?

【0】README

0.1) 本文描述转自 core java volume 1, 源代码为原创,旨在理解 java线程——什么是线程? 的相关知识;
0.2)线程定义:一个程序可以执行多个任务,每一个任务成为线程;
0.3)进程和线程的区别: 本质的区别是, 每个进程拥有自己的一整套变量,而线程则共享数据;


【1】 什么是线程?

1.1)使用线程给其他任务提供机会

  • 1.1.1)下面是在一个单独的线程中执行一个任务的简单过程:
  • step1)将任务代码移到实现了 Runnable接口的类的run方法中:
public interface Runnable
{
    void run();
}
class MyRunnable implements Runnable
  • step2)创建一个类对象:
Runnable r = new MyRunnable();
  • step3)由 Runnable创建一个 Thread对象:(创建一个新线程)
Thread t = new Thread(r);
  • step4)启动线程:
t.start();

Warning)

1.2)看个荔枝:

  • 1.2.1)多线程共享一个变量
    这里写图片描述

  • Conclusion)实现Runnable接口比继承Thread类所具有的优势: (干货)

    • C1):适合多个相同的程序代码的线程去处理同一个资源;
    • C2):可以避免java中的单继承的限制;
    • C3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立;

Warning)

  • W1) main方法其实也是一个线程。在java中所有的线程都是同时启动的,至于什么时候,哪个先执行,完全看谁先得到CPU的资源;
  • W2)在java中,每次程序运行至少启动2个线程。一个是main线程,一个是垃圾收集线程。因为每当使用java命令执行一个类的时候,实际上都会启动一个JVM,每一个jVM 实际就是在操作系统中启动了一个进程;

1.3)判断线程是否启动(主线程也有可能在子线程结束之前结束。并且子线程不受影响,不会因为主线程的结束而结束)
这里写图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,可以使用Timer和TimerTask来实现线程的循环延时。 首先,创建一个继承自TimerTask的任务类,该类需要实现run方法,在run方法中编写具体的任务逻辑。比如: ```java public class ScheduleTask extends TimerTask { @Override public void run() { System.out.println("执行任务" + new Date()); } } ``` 然后,在主程序中创建Timer对象,并使用schedule方法进行任务的延时调度。例如: ```java public class Schedule { public static void main(String[] args) { Timer t = new Timer(); ScheduleTask task = new ScheduleTask(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = null; try { date = sdf.parse("2021-01-18 16:35:55"); t.schedule(task, date); } catch (ParseException e) { e.printStackTrace(); } } } ``` 在上述代码中,我们创建了一个Timer对象t,并将任务task以及延时执行的时间date传递给了t的schedule方法,该方法将会在指定的时间执行任务。 需要注意的是,默认情况下,Timer对象会创建一个非守护线程来进行延时任务的调度。如果希望在执行完调度后能够顺利结束线程,可以将Timer对象的构造函数中的第二个参数设置为true,即将其设置为守护线程。例如: ```java Timer t = new Timer(true); ``` 这样,在执行完所有的延时任务后,程序将会自动结束线程。 综上所述,以上是实现Java线程循环延时的一种方式,通过Timer和TimerTask来进行任务的调度。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Java线程系列(7) —— 线程的延时调度](https://blog.csdn.net/qq_38219153/article/details/112797291)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值