线程的两种实现方式,通过实现Runnable接口的线程方式可以实现资源的共享,而继承Thread则不可以,原因何在?先看下面两段代码:
通过Thread实现线程:
通过Runnable实现:
解释:
因为一个线程只能启动一次,通过Thread实现线程时,线程和线程所要执行的任务是捆绑在一起的。也就使得一个任务只能启动一个线程,不同的线程执行的任务是不相同的,所以没有必要,也不能让两个线程共享彼此任务中的资源。
一个任务可以启动多个线程,通过Runnable方式实现的线程,实际是开辟一个线程,将任务传递进去,由此线程执行。可以实例化多个 Thread对象,将同一任务传递进去,也就是一个任务可以启动多个线程来执行它。这些线程执行的是同一个任务,所以他们的资源是共享。
两种不同的线程实现方式本身就决定了其是否能进行资源共享。
分享到:
相关推荐
多线程资源共享,synchronized,Runnable,Thread
线程的同步与阻塞: 引入多线程访问共享资源可能导致的问题,如竞态条件和数据不一致。介绍如何使用 synchronized 关键字来实现线程的同步和阻塞。 线程间通信: 详解线程间通信的方法,包括 wait、notify 和 ...
解决多线程当中共享资源冲突的问题 1. 冲突问题展示: /* * 共享资源冲突的问题 */ class SingleThread implements Runnable { // 共享资源,100张票 private static int ticket = 100; @Override public void ...
2.1 解决共享资源(synchronized、lock) 12 2.1.1 描述synchronized 12 2.1.2 synchronized 关键字 12 2.1.3 lock 13 2.2 原子性与易变性(volatile) 13 2.2.1 Volatile 13 2.2.2 原子类(AtomicInteger,...
假设两个窗口同时出售一次列车的车票,车票就是共享资源,两个窗口就是两个线程。 3、编写程序,实现线程间的同步控制。假设有一个生产者(Producer),一个消费者(Consumer)。生产者产生0~9的整数,将它们存储在...
java并发编程实战pdf 线程与多线程 ...线程的实现方式 在 Java 中,实现线程的方式大体上分为三种,通过继承 Thread 类、实现 Runnable 接口,实现 Callable 接口。简单的示例代码分别如下所示。
可通过这种方法实现多个线程的资源共享。 线程的生命周期: 1.新建状态(New):用new语句创建的线程对象处于新建状态,此时它和其它的java对象一样,仅仅在堆中被分配了内存 2.绪状态(Runnable):当一个线程...
单线程程序 多线程程序 Thread类的run方法和start方法 线程的启动 线程的启动(1)——利用Thread类的子类 线程的启动(2)——利用Runnable接口 线程的暂时停止 线程的共享互斥 synchronized方法 synchronized阻挡 ...
Java线程综合打包, 众多代码,众多合集, 全面。 如果一个类继承Thread类,则不适合于多个线程共享资源,而实现了Runnable接口,就可以方便地实现资源的共享。
线程的创建有继承Thread类和实现Runnable接口两种方式,通过Runnable方式可以更加容易实现多线程之间资源共享。 通过sleep可以使线程进入休眠状态,通过join方法可以让线程处于等待,其他线程执行完毕后继续执行。 ...
一个进程中的所有线程可以共享进程中的所有资源。 并发的目的是提供系统效率,简化程序设计。多线程是实现并发的一种有效手段。一个进程可以通过运行多个线程来并发地执行多项任务。Java语言的重要特征是在语言级...
60、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 答:有两种实现方法,分别是继承Thread类与实现Runnable接口 用synchronized关键字修饰同步方法 反对使用...
事件处理器与访问共享状态的其他代码都要采取线程安全的方式实现 框架通过在框架线程中调用应用程序代码将并发性引入应用程序,因此对线程安全的需求在整个应用程序中都需要考虑 基础知识 线程安全性 ...
1、什么是线程安全? 当多个线程同时共享同一个全局变量或静态变量,做写的操作时,可能会发生数据... // 这是货票总票数,多个线程会同时共享资源 private int trainCount = 100; @Override public void run() {
线程是进程基础上的进一步划分,可共享进程中的共有资源,线程之上又细分“纤程”又称“协程”。kotlin 和 python 支持“协程”。 在Java中实现基本的多线程有三种方式: 1、继承Thread类,重写run()方法; 2...
与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...
与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...
word源码java java基础知识 复习java基础知识的笔记 进程和线程: 进程和线程主要区别在于他们是操作系统不同的资源...并行是指多任务同时执行,但是任务之间没有任何关系,不涉及共享资源. 比如我一边看电视一边喝水,2件
这种机制既满足不同模块对线程控制和任务调度的独立需求,又共享一个池资源来节省开销,最大程度上节约资源复用线程,帮助提升性能。LiteGo 背景关于异步、并发的现状和问题线程的创建代价比较大,尤其在短时间需要...