精华内容
下载资源
问答
  • C++ 多线程通信方式简介并结合生产者-消费者模式代码实现
  • wait/notify要求在同步关键字中使用,避免了死锁现象,但是如果不先调用wait,而先调用notify的情况下,容易导致线程永久挂起
  • 本周的学习计划是Android通信模块,内容:单线程,多线程通信方式,Handler 与UI Thread的交互,Handler接合子线程的使用。 二丶效果演示(源码链接见文末) 三丶实现功能 1.演示使用Handler常见崩溃 2....

    本文出自:http://blog.csdn.net/dt235201314/article/details/73823653

    一丶概述

    本周的学习计划是Android通信模块,内容:单线程,多线程通信方式,Handler 与UI Thread的交互,Handler接合子线程的使用。

    二丶效果演示(源码链接见文末)


    三丶实现功能

    1.演示使用Handler常见崩溃

    2.handler更新TextView的UI

    3.实现图片轮播及停止

    4.输出handleMessage(Message mes)的mes打印

    5.自定义线程相关handler测试执行

    6.Handler异步消息处理测试

    handler相关方法运用

    四丶正文

    1.选说说多线程(工作到现在用的不太多,都是别人封装好的框架直接用)

    入门文章 菜鸟教程:Java多线程编程

    2.Handler

    最初学习Handler是通过扣丁学堂,之前的文章:扣丁学堂——Handler

    后面在开发扣丁音乐闪屏页面延时跳转功能时也有用到Handler。文章链接:扣丁音乐(一)——闪屏页SplashActivity(欢迎界面)

    最近开发用到的SwipeRefreshLayout 的onRefresh()方法,也常看到handler

    @Override
    public void onRefresh() {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                mEntities.clear();
                intData();
                //★3.通知recycleView改变了数据
                homeAdapter.notifyDataSetChanged();
                //★4.记得关闭刷新,否则刷新球一直在转
                mSwipeRefreshLayout.setRefreshing(false);
            }
        }, 50);
    }
    以上基本是在整理文章前关于handler的所有运用。

    好了,现在重新认识

    2.Handler类的引入:

    3.Handler的执行流程图:

    流程图解析: 
    相关名词

    • UI线程:就是我们的主线程,系统在创建UI线程的时候会初始化一个Looper对象,同时也会创建一个与其关联的MessageQueue;
    • Handler:作用就是发送与处理信息,如果希望Handler正常工作,在当前线程中要有一个Looper对象
    • Message:Handler接收与处理的消息对象
    • MessageQueue:消息队列,先进先出管理Message,在初始化Looper对象时会创建一个与之关联的MessageQueue;
    • Looper:每个线程只能够有一个Looper,管理MessageQueue,不断地从中取出Message分发给对应的Handler处理!

    简单点说:

    当我们的子线程想修改Activity中的UI组件时,我们可以新建一个Handler对象,通过这个对象向主线程发送信息;而我们发送的信息会先到主线程的MessageQueue进行等待,由Looper按先入先出顺序取出,再根据message对象的what属性分发给对应的Handler进行处理!



    4.Handler的相关方法:

    • void handleMessage(Message msg):处理消息的方法,通常是用于被重写!
    • sendEmptyMessage(int what):发送空消息
    • sendEmptyMessageDelayed(int what,long delayMillis):指定延时多少毫秒后发送空信息
    • sendMessage(Message msg):立即发送信息
    • sendMessageDelayed(Message msg):指定延时多少毫秒后发送信息
    • final boolean hasMessage(int what):检查消息队列中是否包含what属性为指定值的消息 
      如果是参数为(int what,Object object):除了判断what属性,还需要判断Object属性是否为指定对象的消息

    5.看代码

    1.非UI线程线程更新UI崩溃测试:

    case R.id.id_btn1:
        new Thread() {
            @Override
            public void run() {
                try {
                    Thread.sleep(1000 * 3);
                    idTv.setText("蹦啦");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }.start();
        break;
    case R.id.id_btn2:
        new Thread() {
            @Override
            public void run() {
                try {
                    Thread.sleep(1000 * 3);
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            idTv.setText("又长帅了");
                        }
                    });
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }.start();
        break;

    关于这里有个小插曲,涉及源码解读,观看爱哥博客

    为什么我们可以在非UI线程中更新UI


    2.循环播放图片及停止

    Handler handler = new Handler();
    Thread myThread = new Thread(){
        @Override
        public void run() {
            index++;
            index = index%3;
            System.out.println(index);
            idImg.setImageResource(images[index]);
            handler.postDelayed(myThread,1000);
        }
    };
    点击事件

    case R.id.id_btn3:
        handler.postDelayed(myThread,1000);
        break;
    case R.id.id_btn4:
        handler.removeCallbacks(myThread);

    handler.postDelayed(X,X)是延迟执行线程

    handler.removeCallbacks(X)移除线程中所有消息和回调


    3.handle传递message可携带的内容有(int 实体内等)

    Handler customHander = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            idTv.setText("msg.arg1>"+msg.arg1+ "\nmsg.arg2>" +msg.arg2 +"\nmsg.obj>"+((Person)msg.obj).toString());
        }
    };
    点击事件

                case R.id.id_btn5:
                    Person dog=new Person("金三胖",1);
    //                Message message = new Message();
                    Message message= customHander.obtainMessage();
                    message.arg1 = 1;
                    message.arg2 = 2;
                    message.obj = dog;
    //                customHander.sendMessage(message);
                    message.sendToTarget();
                    break;

    4.消息拦截测试

    Handler interceptHander = new Handler(new Handler.Callback() {
        @Override
        public boolean handleMessage(Message msg) {
            Toast.makeText(HandlerDemoActivity.this, "callback handleMessage", Toast.LENGTH_SHORT).show();
            System.out.println("is intercept Handler>"+msg.what);
            // 设置true拦截消息
            return true;
        }
    }){
        @Override
        public void handleMessage(Message msg) {
            System.out.println("is intercept Handler");
        }
    };
    点击事件

    case R.id.id_btn6:
        interceptHander.sendEmptyMessage(1);
        break;
    5.子线程中实例化hangler崩溃测试

      case R.id.id_btn7:
                    new Thread() {
                        @Override
                        public void run() {
                            try {
                                Thread.sleep(1000*3);
    //                    idTv.setText("UI线程更新UI会出现什么异常呢?");
                                new Handler().post(new Runnable() {
                                    @Override
                                    public void run() {
                                        idTv.setText("又蹦啦");
                                    }
                                });
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }.start();
                    break;
    6.自定义一个与线程相关Handler

    public class HandlerActivity extends AppCompatActivity {
        private MyThread myThread;
        private Handler handler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                System.out.println("UI ==:"+ Thread.currentThread());
            }
        };
    
        class MyThread extends Thread {
            public Handler handler;
            @Override
            public void run() {
                Looper.prepare();
                handler= new Handler(){
                    @Override
                    public void handleMessage(Message msg) {
                        System.out.println("currentThread:=="+ Thread.currentThread());
                    }
                };
                Looper.loop();
            }
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_handler);
            myThread = new MyThread();
            myThread.start();
            try {
                Thread.sleep(1000*5);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            myThread.handler.sendEmptyMessage(1);
            handler.sendEmptyMessage(1);
        }
    }
    
    效果打印:

    06-29 17:07:30.519 9652-11848/com.example.jinboy.codertodeveloperbytcler I/System.out: currentThread:==Thread[Thread-9681,5,main]
    06-29 17:07:30.659 9652-9652/com.example.jinboy.codertodeveloperbytcler I/System.out: UI ==:Thread[main,5,main]


    7.Handler异步消息处理

    public class HandlerThreadActivity extends AppCompatActivity implements View.OnClickListener {
        private Button idBtn1,idBtn2;
        private Handler threadhandler;
        private HandlerThread thread;
    
        Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                System.out.println("UI thread==>" + Thread.currentThread());
                // 给主线程发送消息
                Message message = new Message();
                message.what =1;
                threadhandler.sendMessageDelayed(message, 1000);
            }
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_handler_thread);
            idBtn1 = (Button) findViewById(R.id.id_btn1);
            idBtn2 = (Button) findViewById(R.id.id_btn2);
            idBtn1.setOnClickListener(this);
            idBtn2.setOnClickListener(this);
            thread = new HandlerThread("Handler Thread");
            thread.start();
            threadhandler = new Handler(thread.getLooper()) {
                @Override
                public void handleMessage(Message msg) {
                    // 处理耗时操作
                    System.out.println("current thread==>" + Thread.currentThread());
                    // 给主线程发送消息
                    Message message = new Message();
                    message.what =1;
                    handler.sendMessageDelayed(message, 1000);
                }
            };
    //        threadhandler.sendEmptyMessage(1);
        }
    
        @Override
        public void onClick(View view) {
            switch (view.getId()) {
                case R.id.id_btn1:
                    handler.sendEmptyMessage(1);
                    break;
                case R.id.id_btn2:
                    handler.removeMessages(1);
                    threadhandler.removeMessages(1);
                    break;
            }
        }
    }
    
    打印输出


    五丶参考链接和拓展学习

    参考内容:

    小猪博客:http://my.csdn.net/zpj779878443

    慕课网课程-Android面试常客Handler详解

    Android异步消息处理机制完全解析-Handler详解

    拓展学习:

    40个Java多线程问题总结

    android进行异步更新UI的四种方式

    Handler源码解析

    HandlerThread的使用以及原理

    Android HandlerThread 完全解析

    Android异步消息处理机制完全解析,带你从源码的角度彻底理解

    六丶日常开发案例

    1.Android避免在主线程进行网络请求和UI操作

    方法一:线程请求网络+Handler更新UI

    //handler 处理返回的请求结果
    handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            Bundle data = msg.getData();
            String val = data.getString("value");
            tv_name.setText(tvName);
            tv_originalArticleNumber.setText(tvOriginalArticleNumber);
            tv_visitNumber.setText(tvVisitNumber);
            tv_mark.setText(tvMark);
            tv_rank.setText(tvRank);
            Log.i("mylog", "请求结果-->" + val);
        }
    };
    
    //新线程进行网络请求
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            BlogAuthor blogAuthor = JsoupUtil.getBlogAutoMessage();
            tvName = blogAuthor.getAuthorName() + "\n" + blogAuthor.getCode()
                    + "\n" + blogAuthor.getMyHelloWorld();
            tvOriginalArticleNumber = blogAuthor.getOriginalArticleNumber();
            tvVisitNumber = blogAuthor.getVisitNumber();
            tvMark = blogAuthor.getMark();
            tvRank = blogAuthor.getRank();
            Message msg = new Message();
            Bundle data = new Bundle();
            data.putString("value", "请求结果");
            msg.setData(data);
            handler.sendMessage(msg);
        }
    };
    new Thread(runnable).start();  //启动子线程
    方法二:强制在UI线程更新UI请求网络

    setContentView(R.layout.activity_main);
    if (android.os.Build.VERSION.SDK_INT > 9) {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }

    源码下载欢迎Star(updating):https://github.com/JinBoy23520/CoderToDeveloperByTCLer




    展开全文
  • Linux的进程/线程通信方式

    千次阅读 2013-07-15 08:45:55
    Linux系统中的进程通信方式主要以下几种: 同一主机上的进程通信方式  * UNIX进程间通信方式: 包括管道(PIPE), 有名管道(FIFO), 和信号(Signal)  * System V进程通信方式:包括信号量(Semaphore), 消息队列...

    Linux系统中的进程通信方式主要以下几种:

    同一主机上的进程通信方式

       * UNIX进程间通信方式: 包括管道(PIPE), 有名管道(FIFO), 和信号(Signal)

       * System V进程通信方式:包括信号量(Semaphore), 消息队列(Message Queue), 和共享内存(Shared Memory)

    网络主机间的进程通信方式

       * RPC: Remote Procedure Call 远程过程调用

       * Socket: 当前最流行的网络通信方式, 基于TCP/IP协议的通信方式.

     

    各自的特点:

    • 管道(PIPE):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系(父子进程)的进程间使用。另外管道传送的是无格式的字节流,并且管道缓冲区的大小是有限的(管道缓冲区存在于内存中,在管道创建时,为缓冲区分配一个页面大小)。
    • 有名管道 (FIFO): 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
    • 信号(Signal): 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
    • 信号量(Semaphore):信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
    • 消息队列(Message Queue):消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
    • 共享内存(Shared Memory ):共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。
    • 套接字(Socket): 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同主机间的进程通信。

     

    Linux系统中的线程通信方式主要以下几种:

     锁机制:包括互斥锁、条件变量、读写锁

       互斥锁提供了以排他方式防止数据结构被并发修改的方法。

       使用条件变量可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。

       读写锁允许多个线程同时读共享数据,而对写操作是互斥的。

     信号量机制(Semaphore):包括无名线程信号量和命名线程信号量

     信号机制(Signal):类似进程间的信号处理

     

    线程间的通信目的主要是用于线程同步。所以线程没有像进程通信中的用于数据交换的通信机制。

    展开全文
  • Linux 的 进程/线程 通信方式总结

    千次阅读 2012-11-13 10:45:36
    linux系统中的进程通信方式主要以下几种: PIPE(FIFO) 消息队列 信号量(Semaphore) 共享存储 SOCKET 同一主机上的进程通信方式  * UNIX进程间通信方式: 包括管道(PIPE), 有名...

    linux系统中的进程通信方式主要以下几种:

    PIPE(FIFO)

    消息队列

    信号量(Semaphore)

    共享存储

    SOCKET

    同一主机上的进程通信方式

       * UNIX进程间通信方式: 包括管道(PIPE), 有名管道(FIFO), 和信号(Signal)

       * System V进程通信方式:包括信号量(Semaphore), 消息队列(Message Queue), 和共享内存(Shared Memory)

    网络主机间的进程通信方式

       * RPC: Remote Procedure Call 远程过程调用

       * Socket: 当前最流行的网络通信方式, 基于TCP/IP协议的通信方式.

     

    各自的特点:

    • 管道(PIPE):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系(父子进程)的进程间使用。另外管道传送的是无格式的字节流,并且管道缓冲区的大小是有限的(管道缓冲区存在于内存中,在管道创建时,为缓冲区分配一个页面大小)。
    • 有名管道 (FIFO): 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
    • 信号(Signal): 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
    • 信号量(Semaphore):信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
    • 消息队列(Message Queue):消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
    • 共享内存(Shared Memory ):共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。
    • 套接字(Socket): 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同主机间的进程通信。

     

    Linux系统中的线程通信方式主要以下几种:

    *  锁机制:包括互斥锁、条件变量、读写锁

       互斥锁提供了以排他方式防止数据结构被并发修改的方法。

       使用条件变量可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。

       读写锁允许多个线程同时读共享数据,而对写操作是互斥的。

    *  信号量机制(Semaphore):包括无名线程信号量和命名线程信号量

    *  信号机制(Signal):类似进程间的信号处理

     

    线程间的通信目的主要是用于线程同步。所以线程没有像进程通信中的用于数据交换的通信机制。

    展开全文
  • 进程和线程通信方式

    千次阅读 2006-12-23 20:02:00
    常见的通信机制有:管道、有名管道(FIFO)、信号、SYS V机制、网络SOCKET方式和全双工管道。其中SYS V机制包含消息队列、信号量、内存共享。 线程通信的方法Shared Memory Port-Based Communication Sockets ...

    进程通信子系统提供进程间的各种通信机制。常见的通信机制有:管道、有名管道(FIFO)、信号、SYS V机制、网络SOCKET方式和全双工管道。其中SYS V机制包含消息队列、信号量、内存共享。

     

    线程间通信的方法

    Shared Memory
    Port-Based Communication
    Sockets
    Message Queues
    Distributed Objects

    参考:http://developer.apple.com/documentation/Cocoa/Conceptual/Multithreading/articles/ThreadComm.html

    展开全文
  • java实现线程通信的几种方式

    千次阅读 2020-05-30 19:34:35
    比如大家熟知的消息中间件的实现,从某种角度上讲,就借助了多线程通信的思想,下面总结了JDK中常用的几种实现线程通信方式,提供参考 1、synchronized实现方式 可能很多小伙伴们会有疑问,synchronized是对共享...
  • Java线程通信详解

    2020-09-01 08:37:44
    本篇文章主要介绍了Java线程通信问题,线程通信用来保证线程协调运行,有需要的朋友可以了解一下。
  • 架构系列——线程通信的实现方式

    千次阅读 2020-02-13 20:52:13
    一、什么是线程通信? 二、线程通信的实现 1.使用volatile实现线程通信 2.使用wait/notify实现线程通信 3.使用ReentrantLock创建Condition实现 4.通过LockSupport实现线程通信 5.使用CountDownLatch实现线程...
  • Java线程(九):Condition-线程通信更高效的方式

    万次阅读 多人点赞 2012-04-20 14:49:39
    Lock可以更好的解决线程同步问题,使之更面向对象,并且ReadWriteLock在处理同步时更强大,那么同样,线程间仅仅互斥是不够的,还需要通信,本篇的内容是基于上篇之上,使用Lock如何处理线程通信。 那么引入本篇的...
  • java线程通信的三种方式

    千次阅读 2019-04-02 14:26:08
    1、传统的线程通信。 在synchronized修饰的同步方法或者修饰的同步代码块中使用Object类提供的wait(),notify()和notifyAll()3个方法进行线程通信。 关于这3个方法的解释: wait():导致当前线程等待,直到其他线程...
  • 3.6 线程通信

    千次阅读 2021-02-04 00:35:31
    线程通信可以实现线程等待其他线程执行结果后再执行,这样来实现不同线程之间按照有序的方式进行工作。        那么问题来了,Java要如何实现线程间通信呢? 3.6.1 实现通信–...
  • 线程通信 3种方式

    万次阅读 2018-05-10 22:46:52
    一、传统线程通信synchronized + wait + notifyObject类的wait()、notify() 、notifyAll()三个方法必须由同步监视器对象来调用,分两种情况:a)同步方法,该类默认实例(this)就是同步监视器,可以在同步方法中可以...
  • 线程通信的四种方式

    2020-04-12 23:34:20
    Java线程通信方式 volatile 等待/通知机制 join方式 threadLocal volatile关键字方式 volatile有两大特性,一是可见性,二是有序性,禁止指令重排序,其中可见性就是可以让线程之间进行通信。 ...
  • android 线程通信学习

    2015-05-22 09:20:15
    Demo演示android线程通信机制的实现方式
  • 线程通信的几种方式

    千次阅读 2020-02-22 16:29:19
    可以通过以下几种方式实现: (1)等待通知机制 两个线程通过对同一对象调用等待 wait() 和通知 notify() 方法来进行通讯。 如两个线程交替打印奇偶数: public class TwoThreadWaitNotify { ...
  • java的多线程通信有Lock,wait/notify,Semaphore三种方式,已一道常见面试题来简单演示这三种多线程通信方式。 两个线程循环间隔打印指定内容,一个打印从1到52的数字,一个打印从A到Z的字母,打印输出如下: 1 2 A...
  • 线程通信方式3:消息传递方式

    热门讨论 2013-01-18 11:01:23
    线程通信方式3:消息传递方式的演示。采用计算演示线程的执行,并采用用户界面线程来实时显示执行的进度,线程间的通信方式采用了3种方式相结合,对多线程间的通信有比较好的学习和研究价值。
  • C++11 线程通信的三种方式

    千次阅读 2019-12-13 10:15:18
    C++11线程间的通信方式有三种: (1)通过条件变量进行线程间的通信 (2)通过标志位来通知线程间的通信 (3)通过std::furture来进行线程间的通信 (1)通过条件变量进行线程间的通信 全局区间中定义如下: ...
  • 线程通信方式2:参数传递方式

    热门讨论 2013-01-11 11:17:13
    线程通信方式2:参数传递方式。通过3类线程的创建方法,演示了给线程传递方式的方式,包括;单参数、多参数和类3类。
  • 进程与线程的区别进程的通信方式线程通信方式 进程与线程的区别: 通俗的解释 一个系统运行着很多进程,可以比喻为一条马路上有很多马车 不同的进程可以理解为不同的马车 而同一辆马车可以有很多匹马来拉--...
  • 主要为大家详细介绍了Java线程间的通信方式,以代码结合文字的方式来讨论线程间的通信,感兴趣的朋友可以参考一下
  • 线程通信 为什么要线程通信?   多个线程并发执行时,在默认情况下CPU是随机切换线程的,当我们需要多个线程来共同完成一件任务,并且我们希望他们有规律的...线程通信方式 synchronized 线程通信   JDK1.5之前
  • c++ 线程通信方式

    万次阅读 2019-07-28 23:07:51
    线程同步和线程互斥 互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的,线程间不需要知道彼此的存在。 同步:是指在互斥的基础上...
  • Python线程通信方式

    千次阅读 2019-06-04 20:16:30
    1、python多线程 #! /usr/bin/evn python3 # --*-- coding: utf-8 --*-- #该实例反编译来说明函数执行流程 import dis def add(a): a = a+1 return a print(dis.dis(add)) # Python中一个线程对应于C语言中的...
  • 线程之间的通信方式

    千次阅读 2019-08-13 17:18:04
    线程通信的几种实现方式 首先,要短信线程通信的模型有两种:共享内存和消息传递,以下方式都是基本这两种模型来实现的。我们来基本一道面试常见的题目来分析: 题目:有两个线程A、B,A线程向一个集合...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 340,813
精华内容 136,325
关键字:

线程通信方式