`
文章列表
        在主线程中启动一个线程t,当主线程向t发出停止执行,t用一个boolean值来控制run中的不断执行过程。t进行终止操作,这里的终止不是是使得线程执行完run方法。 public class CountupThread extends Thread { private long counter=0; //计数器 private volatile boolean shutdownRequested=false; public void shutdownRequest(){ shutdownRequested=true; ...
        如果主线程向别的线程发送请求,别的线程处理完请求后还要返回给主线程一个结果,那么这种状况下应该使用Future Pattern。         示例:Host类中的request方法发送请求,这个方法中启动了一个线程,线程中首 ...
        这个模型也称为背景线程。把工作交个被人,让别人启动一个线程做交给的任务,自己继续做自己的事,这是Thread Per Message。而在Worker Thread中,任务交给别人后,并不是每次都开启一个线程,而是不断的重复利用已有的线程。事实上开启一个线程是很耗费时间的工作。         实例中:Request是委托者,它有execute功能。WorkThread不断的从队列中获取Request,然后让Request执行。ClientThread不断的向队列中添加Request。而“队列”Channel中,如果满了,添加会等待,如果空了,获取会等待。Channel中有 ...

外观模式

        面向对象中通常将可以重复使用的工具类中的行为组织在一起形成最小的类。但是随着包的复用性使得子系统中类的多样性导致选择太多,这时可以使用外观(Facade)模式。一个个外观就是一个类,它包含的功能介于 ...

适配器模式

一、接口与抽象类的区别: 1、一个类可以实现多个接口,只能继承一个类; 2、抽象类可以包含具体的方法,接口的方法都是抽象的; 3、抽象类可以声明和使用字段;接口不能,接口只能有static final常量 4、抽象类可以是public、protected、private或者默认的package,而接口全为public
         这个模式是每发来一个请求就分配一个线程,让这个线程去执行工作。委托消息的一端与执行消息的一端是不同的线程。示例中Host类是一个接受请求并构造和启动线程的类。 public class Host { private final Helper helper=new Helper(); public void request(final int count,final char c){ System.out.println(" request("+count+","+c+") Begin"); ...
        读的时候,实例的状态不会改变,“写”会改变线程的状态。         这种模式,把读写分开,读之前获取锁定,不给写;写之前获取锁定,不给读。         示例:WriteThread和ReadThread不断的读写公共的data。类Data中,有读写操作,他有一个lock,读写之前都会进行锁定。这个锁ReadWriteLock是按照如下实现的:          如果真正写的数量大于0或者等待优先的等待写入者大于0,那么想读的线程进入等待状态,直到可以读为止,然后读入,这时读入人数加1,读完后如如人数减去1,使优先写入为真,并通知在这个对象中的所有等待线程。写的过程 ...
        生产者与消费者之间加入一个“桥梁参与者”,它用来缓冲两者之间的处理速度。         示例:MakerThread用来不断的产生cake,把cake送到table上;而EaterThread不断的eat cake。Table用来缓冲两者的生产消费过程,put方法中如果出现table满了,那么put方法就要等待,table不满了就被notify了,然后把cake放到table上,并notify那些EaterThread;take方法发现table空了,那么一直等到有cake(被notify的时候当然有cake咯),然后吃掉一个。 import java.util.Ran ...
        这种模式主要是如果对于一个警戒条件成立,那么就可以执行,如果不满足警戒条件,那么只需要返回,不做任何工作。         示例:Data类表示数据,字段content表示内容,changed字段表示是否改变,如果content改变了而没有存储,那么该字段为true,如果content没有改变或者改变了却已经存储了,那么该字段为false。         change方法改变数据,save方法保存数据,仅当changed为true时候才保存。         SaverThread是一个每隔一秒就保存一次数据的线程。         ChangeThread是一个每 ...

Handle

一、Handler的定义:主要接受子线程发送的数据, 并用此数据配合主线程更新UI.          解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件, 进行事件分发, 比如说, 你要是点击一个 Button ,Android会分发事件到Button上,来响应你的操作。  如果此时需要一个耗时的操作,例如: 联网读取数据,    或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,,如果你放在主线程中的话,界面会出现假死现象, 如果5秒钟还没有完成的话,,会收到Android系统的一个错误提示  &quo ...
题目大意:有四个线程,每个线程输出1,2,3,4,设计程序使得依次输出:1111222233334444   求解思路:创建一个对象o,当四个线程依次输出1后,检测已经输出的次数count,如果输出次数为1,2,3,那么让线程进入对象o的等待集,如果为4,那么唤醒o中等待集中所有线程并将count重置。   public class PrintTest extends Thread { public static Object o=new Object(); public static int count=0; private int num=0; public ...
       Guraded Suspend Partten是当前不适合执行时,就进行等待,直到被唤醒去执行。           类Request用来表示请求,这里没有特殊的处理。         RequestQueue是一个队列,用来存储所有由ClientThread发出来的请求,它有两个synchronized方法getRequest和putRequest,putRequest是向队列中存储一个请求,而getRequest是从队列中取出一个请求,如果队列为空,那么就进行等待。   public class Request { private String name; ...
Immutable是“不能改变“的意思。如果多线程中共享的数据是不可变的(例如String、Integer),那么无论多少线程来访问这个数据都不会对使这个数据发生改变。这是也不需要synchronized来设定临界区。 public final class Person { private S ...
它是“一个线程”的意思,就像一个桥,每次只能通过一个人。 下面测试:Gate是表示门的类,经过门(pass)会检查姓名与address的首字母是否相同,如果不同,输出                  Passer继承了Thread,它一直反复通过门                  Main中有三个Passer,让这三个Passer通过同一个门(这里意味着gate的信息是共享的) public class Gate { private int counter=0; private String name="Nobody"; private String ...
CUDA编程模型 CUDA将CPU作为主机(Host),GPU作为设备(Device)。一个系统中可以有一个主机和多个设备。CPU负责逻辑性强的事务处理和串行计算,GPU专注于执行高度线程化的并行处理任务。它们拥有相互独立的存储器(主机端的内存和显卡端的显存)。 运行在GPU上的函数称为kernel(内核函数)。一个完整的CUDA程序是由一些列的kernel函数和主机端的串行处理步骤共同完成的。CPU串行代码的工作包括在kernel启动前进行的数据准备、设备初始化以及在kernel之间进行一些串行化计算。 kernel函数以函数类型限定符_global_定义,并且只能在主机端代码中 ...
Global site tag (gtag.js) - Google Analytics