java基础-线程

  1. 创建线程
    Java 提供了三种创建线程的方法:

    • 通过实现 Runnable 接口;
    • 通过继承 Thread 类本身;
    • 通过 Callable 和 Future 创建线程。
  2. 实现Runnable接口(常用
    创建一个线程,最简单的方法是创建一个实现 Runnable 接口的类。
    为了实现 Runnable,一个类只需要执行一个方法调用 run(),声明如下:
    public void run()
    创建一个实现 Runnable 接口的类之后,就可以在类中实例化一个线程对象。
    Thread 定义了几个构造方法,下面的这个是我们经常使用的:
    Thread(Runnable threadOb,String threadName);
    threadOb 是一个实现 Runnable 接口的类的实例,并且 threadName 指定新线程的名字。新线程创建之后,调用其 start() 方法它才会运行。

  3. 继承Thread类
    该类继承 Thread 类,然后创建一个该类的实例。
    继承类必须重写 run() 方法,该方法是新线程的入口点。它也必须调用 start() 方法才能执行。
    该方法尽管被列为一种多线程实现方式,但是本质上也是实现了 Runnable 接口的一个实例。

  4. 通过 Callable 和 Future 创建线程

    1. 创建 Callable 接口的实现类,并实现 call() 方法,该 call() 方法将作为线程执行体,并且有返回值。
    2. 创建 Callable 实现类的实例,使用 FutureTask 类来包装 Callable 对象,该 FutureTask 对象封装了该 Callable 对象的 call() 方法的返回值。
    3. 使用 FutureTask 对象作为 Thread 对象的 target 创建并启动新线程。
    4. 调用 FutureTask 对象的 get() 方法来获得子线程执行结束后的返回值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java的多线程编程中,线程同步是一个非常重要的概念。它用来确保多个线程在访问共享资源时不会产生冲突或竞争条件。在Java中,有几种方式可以实现线程同步,其中之一就是使用synchronized关键字。 synchronized关键字可以用于修饰代码块或方法。当我们使用synchronized修饰代码块时,需要指定一个对象作为锁对象。在代码块内部,只有获取了锁对象的线程才能执行代码块中的内容,其他线程则需要等待。 在给定的示例中,synchronized关键字被用于修饰insert方法,这意味着同一时刻只能有一个线程能够执行这个方法。这样就确保了对num变量的访问是安全的,不会出现竞争条件导致数据不一致的情况。 具体来说,当一个线程进入synchronized修饰的insert方法时,它会获取到insertData对象的锁,并执行方法内部的代码。而其他线程则需要等待,直到当前线程释放了锁。这样就保证了对num变量的操作是线程安全的。 需要注意的是,synchronized关键字只能保证同一时刻只有一个线程能够执行被修饰的代码块或方法,但并不能保证线程的执行顺序。所以在多线程编程中,我们还需要考虑到线程的调度和执行顺序的不确定性。 除了synchronized关键字,Java还提供了其他的线程同步机制,比如Lock接口,它提供了更灵活和细粒度的线程同步控制。但是在大部分情况下,synchronized关键字已经能够满足我们的需求,使用它来实现线程同步是一种简单而有效的方式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Java高级特性 - 多线程基础(3)线程同步](https://blog.csdn.net/weixin_52034200/article/details/130253687)[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: 50%"] - *2* [EduCoder Java高级特性 - 多线程基础(3)线程同步](https://blog.csdn.net/weixin_45981481/article/details/114494972)[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: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值