线程间通信的方式(线程间通信方式有哪些)

2025-07-14 11:45:02 0

线程间通信的方式(线程间通信方式有哪些)

大家好,线程间通信的方式相信很多的网友都不是很明白,包括线程间通信方式有哪些也是一样,不过没有关系,接下来就来为大家分享关于线程间通信的方式和线程间通信方式有哪些的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

本文目录

线程间通信方式有哪些

多线程通信的方法主要有以下三种:
1.全局变量
进程中的线程间内存共享,这是比较常用的通信方式和交互方式。
注:定义全局变量时最好使用volatile来定义,以防编译器对此变量进行优化。
2.Message消息机制
常用的Message通信的接口主要有两个:PostMessage和PostThreadMessage,
PostMessage为线程向主窗口发送消息。而PostThreadMessage是任意两个线程之间的通信接口。
2.1.PostMessage()
函数原型:
B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);
参数:
hWnd:其窗口程序接收消息的窗口的句柄。可取有特定含义的两个值:
HWND.BROADCAST:消息被寄送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口
和弹出式窗口。消息不被寄送到子窗口。
NULL:此函数的操作和调用参数dwThread设置为当前线程的标识符PostThreadMessage函数一样。
Msg:指定被寄送的消息。
wParam:指定附加的消息特定的信息。
IParam:指定附加的消息特定的信息。
返回值:如果函数调用成功,返回非零值:如果函数调用失败,返回值是零。
MS还提供了SendMessage方法进行消息间通讯,SendMessage(),他和PostMessage的区别是:
SendMessage是同步的,而PostMessage是异步的。SendMessage必须等发送的消息执行之后,才返回。
2.2.PostThreadMessage()
PostThreadMessage方法可以将消息发送到指定线程。
函数原型:BOOL PostThreadMessage(DWORD idThread,UINT Msg,WPARAM wParam, LPARAM lParam);
参数除了ThreadId之外,基本和PostMessage相同。
目标线程通过GetMessage()方法来接受消息。
注:使用这个方法时,目标线程必须已经有自己的消息队列。否则会返回ERROR_INVALID_THREAD_ID错误。可以用
PeekMessage()给线程创建消息队列。
3.CEvent对象
CEvent为MFC中的一个对象,可以通过对CEvent的触发状态进行改变,从而实现线程间的通信和同步。

进程之间和线程之间的通信

管道 :管道是一种半 双工的通信方式 ,各个进程 互斥访问 管道, 数据也只能单向流动 ,但是可以通过两个管道来实现全双工通信。

共享存储 :多个进程都可以互斥访问的存储空间,可以基于数据结构(比如数组)或者基于存储区。

消息队列 :传递结构化的消息。各个进程都有一个相当与信箱一样的消息缓冲队列。进程A和进程B通信就可以发消息给进程A的消息缓冲队列。

信号量 :主要用来控制多个进程对共享资源的访问。主要作为进程间以及同一进程内不同线程之间的同步手段。信号量有整形和记录型信号量。整形信号量不满足“让权等待”原则,而记录型信号量有block和weakup原语,可以实现让权等待。

套接字

与其他通信机制不同的是,可用于 不同机器间的进程通信

线程之间的通信不像进程那么复杂,因为同一个进程的线程资源都基本上是一样的,它们的通信目的主要是用于线程同步和互斥访问某个资源,所以线程没有像进程通信中的用于数据交换的通信机制。

Android-Handle(线程间通信)详解

线程间通信是在Android开发中比较经常遇到的,我们刷新UI界面一般是通过子线程做完某些事情后,要改变主页面就要通过数据的通信,让主线程接收到信息后自己改变UI界面。

1. Handle 先进先出原则;
2. Looper 类用来管理特定线程内对象之间的消息交换(MessageExchange);
3. Message 类用来保存数据。

1.Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列);
2.Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里;或者接收Looper从Message Queue取出)所送来的消息;

android.os.Message的主要功能是进行消息的封装,同时可以指定消息的操作形式,Message类定义的变量和常用方法如下:

在整个消息处理机制中,message又叫task,封装了任务携带的信息和处理该任务的handler。message的用法比较简单,但是有这么几点需要注意:

在使用Handler处理Message时,需要Looper(通道)来完成。在一个Activity中,系统会自动帮用户启动Looper对象,而在一个用户自定义的类中,则需要用户手工调用Looper类中的方法,然后才可以正常启动Looper对象。Looper的字面意思是“循环者”,它被设计用来使一个普通线程变成Looper线程。所谓Looper线程就是循环工作的线程。在程序开发中(尤其是GUI开发中),我们经常会需要一个线程不断循环,一旦有新任务则执行,执行完继续等待下一个任务,这就是Looper线程。使用Looper类创建Looper线程很简单:

这是在子线程中创建Handler的情况,如果在主线程中创建Handler是不需要调用 Looper.prepare(); 和 Looper.loop(); 方法。

Handler是更新UI界面的机制,也是消息处理的机制。我们可以通过Handle发送消息,也可以处理消息。

Android在设计的时候,封装了一套消息创建、传递、处理机制,如果不遵循这样的机制就没有办法更新UI信息,就会抛出异常。
创建Handler实例化对象时,可以重写的回调方法:

Android进程间和线程间通信方式

        进程:是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。

  线程:是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一些在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

  区别:

  (1)、一个程序至少有一个进程,一个进程至少有一个线程;

  (2)、线程的划分尺度小于进程,使得多线程程序的并发性高;

  (3)、进程在执行过程中拥有独立的内存单元,而多个线程共享内存,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉。

---------------------

一、Android进程间通信方式

1.Bundle

  由于Activity,Service,Receiver都是可以通过Intent来携带Bundle传输数据的,所以我们可以在一个进程中通过Intent将携带数据的Bundle发送到另一个进程的组件。

  缺点:无法传输Bundle不支持的数据类型。

2.ContentProvider

  ContentProvider是Android四大组件之一,以表格的方式来储存数据,提供给外界,即Content Provider可以跨进程访问其他应用程序中的数据。用法是继承ContentProvider,实现onCreate,query,update,insert,delete和getType方法,onCreate是负责创建时做一些初始化的工作,增删查改的方法就是对数据的查询和修改,getType是返回一个String,表示Uri请求的类型。注册完后就可以使用ContentResolver去请求指定的Uri。

3.文件

  两个进程可以到同一个文件去交换数据,我们不仅可以保存文本文件,还可以将对象持久化到文件,从另一个文件恢复。要注意的是,当并发读/写时可能会出现并发的问题。

4.Broadcast

  Broadcast可以向android系统中所有应用程序发送广播,而需要跨进程通讯的应用程序可以监听这些广播。

5.AIDL方式

  Service和Content Provider类似,也可以访问其他应用程序中的数据,Content Provider返回的是Cursor对象,而Service返回的是Java对象,这种可以跨进程通讯的服务叫AIDL服务。

         AIDL通过定义服务端暴露的接口,以提供给客户端来调用,AIDL使服务器可以并行处理,而Messenger封装了AIDL之后只能串行运行,所以Messenger一般用作消息传递。

6.Messenger

  Messenger是基于AIDL实现的,服务端(被动方)提供一个Service来处理客户端(主动方)连接,维护一个Handler来创建Messenger,在onBind时返回Messenger的binder。

  双方用Messenger来发送数据,用Handler来处理数据。Messenger处理数据依靠Handler,所以是串行的,也就是说,Handler接到多个message时,就要排队依次处理。

7.Socket

  Socket方法是通过网络来进行数据交换,注意的是要在子线程请求,不然会堵塞主线程。客户端和服务端建立连接之后即可不断传输数据,比较适合实时的数据传输

二、Android线程间通信方式

  一般说线程间通信主要是指主线程(也叫UI线程)和子线程之间的通信,主要有以下两种方式:

1.AsyncTask机制

  AsyncTask,异步任务,也就是说在UI线程运行的时候,可以在后台的执行一些异步的操作;AsyncTask可以很容易且正确地使用UI线程,AsyncTask允许进行后台操作,并在不显示使用工作线程或Handler机制的情况下,将结果反馈给UI线程。但是AsyncTask只能用于短时间的操作(最多几秒就应该结束的操作),如果需要长时间运行在后台,就不适合使用AsyncTask了,只能去使用Java提供的其他API来实现。

2.Handler机制

  Handler,继承自Object类,用来发送和处理Message对象或Runnable对象;Handler在创建时会与当前所在的线程的Looper对象相关联(如果当前线程的Looper为空或不存在,则会抛出异常,此时需要在线程中主动调用Looper.prepare()来创建一个Looper对象)。使用Handler的主要作用就是在后面的过程中发送和处理Message对象和让其他的线程完成某一个动作(如在工作线程中通过Handler对象发送一个Message对象,让UI线程进行UI的更新,然后UI线程就会在MessageQueue中得到这个Message对象(取出Message对象是由其相关联的Looper对象完成的),并作出相应的响应)。

三、Android两个子线程之间通信

  面试的过程中,有些面试官可能会问Android子线程之间的通信方式,由于绝大部分程序员主要关注的是Android主线程和子线程之间的通信,所以这个问题很容易让人懵逼。

  主线程和子线程之间的通信可以通过主线程中的handler把子线程中的message发给主线程中的looper,或者,主线程中的handler通过post向looper中发送一个runnable。但looper默认存在于main线程中,子线程中没有Looper,该怎么办呢?其实原理很简单,把looper绑定到子线程中,并且创建一个handler。在另一个线程中通过这个handler发送消息,就可以实现子线程之间的通信了。

  子线程创建handler的两种方式:

  方式一:给子线程创建Looper对象:

new Thread(new Runnable() {

            public void run() { 

                Looper.prepare();  // 给这个Thread创建Looper对象,一个Thead只有一个Looper对象

                Handler handler = new Handler(){ 

                    @Override 

                    public void handleMessage(Message msg) { 

                        Toast.makeText(getApplicationContext(), "handleMessage", Toast.LENGTH_LONG).show(); 

                    } 

                }; 

                handler.sendEmptyMessage(1); 

                Looper.loop(); // 不断遍历MessageQueue中是否有消息

            }; 

        }).start();

---------------------

       方式二:获取主线程的looper,或者说是UI线程的looper:

new Thread(new Runnable() {

            public void run() { 

                Handler handler = new Handler(Looper.getMainLooper()){ // 区别在这!!! 

                    @Override 

                    public void handleMessage(Message msg) { 

                        Toast.makeText(getApplicationContext(), "handleMessage", Toast.LENGTH_LONG).show(); 

                    } 

                }; 

                handler.sendEmptyMessage(1); 

            }; 

        }).start();

---------------------

线程的几种控制方式以及线程间的几种通信方式

几种进程间的通信方式
(1) 管道(pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有血缘关系的进程间使用。进程的血缘关系通常指父子进程关系。
(2)有名管道(named pipe):有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间通信。
(3)信号量(semophore):信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它通常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
(4)消息队列(message queue):消息队列是由消息组成的链表,存放在内核中 并由消息队列标识符标识。消息队列克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
(5)信号(signal):信号是一种比较复杂的通信方式,用于通知接收进程某一事件已经发生。
(6)共享内存(shared memory):共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问,共享内存是最快的IPC方式,它是针对其他进程间的通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量配合使用,来实现进程间的同步和通信。
(7)套接字(socket):套接口也是一种进程间的通信机制,与其他通信机制不同的是它可以用于不同及其间的进程通信。
几种线程间的通信机制
1、锁机制
1.1 互斥锁:提供了以排它方式阻止数据结构被并发修改的方法。
1.2 读写锁:允许多个线程同时读共享数据,而对写操作互斥。
1.3 条件变量:可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。
2、信号量机制:包括无名线程信号量与有名线程信号量
3、信号机制:类似于进程间的信号处理。
线程间通信的主要目的是用于线程同步,所以线程没有象进程通信中用于数据交换的通信机制。

多个线程之间是如何进行通信的呢

Java多线程间的通信Java还提供了一种线程间通信的机制,这种通信通什么实现?wait,notify等机制或使用pipeInputStream和pipeOutputStream1.线程的几种状态线程有四种状态,任何一个线程肯定处于这四种状态中的一种:1)产生(New):线程对象已经产生,但尚未被启动,所以无法执行。如通过new产生了一个线程对象后没对它调用start()函数之前。2)可执行(Runnable):每个支持多线程的系统都有一个排程器,排程器会从线程池中选择一个线程并启动它。当一个线程处于可执行状态时,表示它可能正处于线程池中等待排排程器启动它;也可能它已正在执行。如执行了一个线程对象的start()方法后,线程就处于可执行状态,但显而易见的是此时线程不一定正在执行中。3)死亡(Dead):当一个线程正常结束,它便处于死亡状态。如一个线程的run()函数执行完毕后线程就进入死亡状态。4)停滞(Blocked):当一个线程处于停滞状态时,系统排程器就会忽略它,不对它进行排程。

请问线程间通信的几种方法

线程间通信的方法如下:
1、全局变量
进程中的线程间内存共享,这是比较常用的通信方式和交互方式。定义全局变量时最好使用volatile来定义,以防编译器对此变量进行优化。
2、Message消息机制
常用的Message通信的接口主要有两个:PostMessage和PostThreadMessage,PostMessage为线程向主窗口发送消息。而PostThreadMessage是任意两个线程之间的通信接口。
3、CEvent对象
CEvent为MFC中的一个对象,可以通过对CEvent的触发状态进行改变,从而实现线程间的通信和同步。
***隐藏网址***

关于线程间通信的方式和线程间通信方式有哪些的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

线程间通信的方式(线程间通信方式有哪些)

本文编辑:admin

更多文章:


c 自学视频教程书籍(初学c语言,有哪些实用的书籍推荐)

c 自学视频教程书籍(初学c语言,有哪些实用的书籍推荐)

大家好,关于c 自学视频教程书籍很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于初学c语言,有哪些实用的书籍推荐的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

2026年3月18日 02:30

c语言软件csdn(新手学习C语言一般用什么软件)

c语言软件csdn(新手学习C语言一般用什么软件)

今天给各位分享新手学习C语言一般用什么软件的知识,其中也会对新手学习C语言一般用什么软件进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录新手学习C语言一般用什么软件c语言用什么软件新手学习C语言一般用什么软件新

2025年12月18日 05:45

随机数公式wps(求wps 随机函数公式,从+0.005到-0.015,不能出现0)

随机数公式wps(求wps 随机函数公式,从+0.005到-0.015,不能出现0)

大家好,关于随机数公式wps很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于求wps 随机函数公式,从+0.005到-0.015,不能出现0的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下

2026年8月9日 03:15

scum线怎么做(scum简易工具箱怎么弄)

scum线怎么做(scum简易工具箱怎么弄)

各位老铁们好,相信很多人对scum线怎么做都不是特别的了解,因此呢,今天就来为大家分享下关于scum线怎么做以及scum简易工具箱怎么弄的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录scum简易工具箱怎么弄人渣

2026年5月23日 11:00

html表格的基本语法结构(在HTML表格中align表示什么)

html表格的基本语法结构(在HTML表格中align表示什么)

大家好,如果您还对html表格的基本语法结构不太了解,没有关系,今天就由本站为大家分享html表格的基本语法结构的知识,包括在HTML表格中align表示什么的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录在HTM

2025年7月20日 14:15

calico网络模式(一文学会Calico网络自定义)

calico网络模式(一文学会Calico网络自定义)

今天给各位分享一文学会Calico网络自定义的知识,其中也会对一文学会Calico网络自定义进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一文学会Calico网络自定义K8s网络组件-Calicok8s网络之

2025年8月5日 15:30

java开发系统流程(公司里面开发一个java项目的流程是什么)

java开发系统流程(公司里面开发一个java项目的流程是什么)

大家好,关于java开发系统流程很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于公司里面开发一个java项目的流程是什么的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有

2025年12月4日 15:30

replace belt 兄弟打印机(兄弟打印机出现replace toner cartridge是什么意思)

replace belt 兄弟打印机(兄弟打印机出现replace toner cartridge是什么意思)

大家好,关于replace belt 兄弟打印机很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于兄弟打印机出现replace toner cartridge是什么意思的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可

2025年9月26日 17:30

maple手机版下载(有没冒险岛的单机游戏下载)

maple手机版下载(有没冒险岛的单机游戏下载)

大家好,如果您还对maple手机版下载不太了解,没有关系,今天就由本站为大家分享maple手机版下载的知识,包括有没冒险岛的单机游戏下载的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录有没冒险岛的单机游戏下载哪里可

2025年12月14日 03:15

爱迪尔门锁系统连接数据库失败(爱迪尔 a90安装建立连接远程数据失败是怎么回事)

爱迪尔门锁系统连接数据库失败(爱迪尔 a90安装建立连接远程数据失败是怎么回事)

本篇文章给大家谈谈爱迪尔门锁系统连接数据库失败,以及爱迪尔 a90安装建立连接远程数据失败是怎么回事对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年6月1日 23:45

domestication(domestic的名词是什么)

domestication(domestic的名词是什么)

“domestication”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看domestication(domestic的名词是什么)!本文目录domestic的名词是什么domestication谁的理论domestica

2025年7月11日 04:30

正则表达式匹配换行符和空格(为什么这个正则表达式不能匹配空格和换行)

正则表达式匹配换行符和空格(为什么这个正则表达式不能匹配空格和换行)

这篇文章给大家聊聊关于正则表达式匹配换行符和空格,以及为什么这个正则表达式不能匹配空格和换行对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录为什么这个正则表达式不能匹配空格和换行用正则表达式,清除文章中多余的换行和空白字符为什

2026年4月22日 13:30

unionid获取openid(怎么获取微信的unionid)

unionid获取openid(怎么获取微信的unionid)

本篇文章给大家谈谈unionid获取openid,以及怎么获取微信的unionid对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录怎么获取微

2025年5月27日 19:00

emersonev1000变频器说明书(变频器艾默生ev1000的程序,说明书关于寄存器地址的描述有几点疑惑求助)

emersonev1000变频器说明书(变频器艾默生ev1000的程序,说明书关于寄存器地址的描述有几点疑惑求助)

本篇文章给大家谈谈emersonev1000变频器说明书,以及变频器艾默生ev1000的程序,说明书关于寄存器地址的描述有几点疑惑求助对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录变频器艾默生ev1000的程序,说明书关于寄

2025年12月23日 07:15

sql server的azure扩展(如何在Azure上创建一个mssql的数据库,然后使用本机的sql management链接)

sql server的azure扩展(如何在Azure上创建一个mssql的数据库,然后使用本机的sql management链接)

各位老铁们,大家好,今天由我来为大家分享sql server的azure扩展,以及如何在Azure上创建一个mssql的数据库,然后使用本机的sql management链接的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收

2026年6月27日 21:45

浏阳今日疫情(我去浏阳长房金阳现在过去会不会变红码)

浏阳今日疫情(我去浏阳长房金阳现在过去会不会变红码)

其实浏阳今日疫情的问题并不复杂,但是又很多的朋友都不太了解我去浏阳长房金阳现在过去会不会变红码,因此呢,今天小编就来为大家分享浏阳今日疫情的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录我去浏阳长房金阳现在过去会

2026年8月6日 17:15

yielded什么意思(yield是什么意思)

yielded什么意思(yield是什么意思)

各位老铁们,大家好,今天由我来为大家分享yielded什么意思,以及yield是什么意思的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录yield是

2025年12月4日 01:15

十进制转换8进制(怎么把一个10 进制数转化为8进制啊!)

十进制转换8进制(怎么把一个10 进制数转化为8进制啊!)

“十进制转换8进制”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看十进制转换8进制(怎么把一个10 进制数转化为8进制啊!)!本文目录怎么把一个10 进制数转化为8进制啊!请问十进制怎样转成八进制怎样把十进制的数转为八进制数

2025年5月31日 12:15

pg和mysql的区别(MySQL、PG属于分布式数据库吗怎么区分数据库是否为分布式)

pg和mysql的区别(MySQL、PG属于分布式数据库吗怎么区分数据库是否为分布式)

大家好,如果您还对pg和mysql的区别不太了解,没有关系,今天就由本站为大家分享pg和mysql的区别的知识,包括MySQL、PG属于分布式数据库吗怎么区分数据库是否为分布式的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧

2025年9月23日 06:45

css所有标签大全(Css样式中哪些标签最常用)

css所有标签大全(Css样式中哪些标签最常用)

这篇文章给大家聊聊关于css所有标签大全,以及Css样式中哪些标签最常用对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录Css样式中哪些标签最常用css表单包括哪些标签cssdiv常用标签有哪些css放在什么标签里面CSS常用

2026年5月5日 16:45

近期文章

本站热文

electronics软件(labcenter electronics是什么软件)
2025-05-22 23:45:02 浏览:134
博客是微博吗(博客是微博吗)
2025-05-22 22:45:01 浏览:111
diversity and distribution(悬赏英语短文)
2025-05-23 16:15:02 浏览:107
ios软件开发前景(iOS就业前景怎么样)
2025-05-22 23:00:01 浏览:102
next month(有The next month这个单词吗,和 next month有什么区别)
2025-05-23 02:30:01 浏览:102
patron(patron是什么意思)
2025-05-23 10:30:02 浏览:95
标签列表

热门搜索