单线程和多线程 关于它们的区别,zhihu上有一个回答,我认为十分不错,如下: . 单进程单线程:一个人在一个桌子上吃菜. . 单进程多线程:多个人在同一个桌子上一起吃菜. . 多进程单线程:多个人每个人在自己的桌子上吃菜. 多线程的问题是多个人同时吃一道菜的时候容易发生争抢.例如两个人同时夹一个菜,一个人刚伸出筷子,结果伸到的时候已经被夹走菜了.此时就必须等一个人夹一口之后,在还给另外一个人夹菜,也就是说资源共享就会发生冲突争抢. 例子: 多线程: 浏览器浏览一个页面,里面有很多图片,多线程,…
Java:多线程基础(1) 实现多线程的两种方式 1.继承Thread类 public class myThread extends Thread { /** * 继承Thread类,重写RUN方法. */ @Override public void run() { super.run(); } } [说明] 由于Java继承机制,此处不再支持多继承. 2.实现Runnable接口 class myRunable implements Runnable { /** * 实现Runnable接口,…
Java基础教程:多线程基础(4)——Lock的使用 快速开始 Java 5中Lock对象的也能实现同步的效果,而且在使用上更加方便. 本节重点的2个知识点是:ReentrantLock类的使用和ReentrantReadWriteLock类的使用. 使用ReentrantLock类 在Java多线程中,可以使用synchronized关键字来实现线程之间同步互斥. 但在Java1.5中新增的ReentrantLock类也能达到同样的效果,并且在扩展功能上也更加强大,比如具有嗅探锁定.多路分支通…
Java基础教程:多线程基础(2)——线程间的通信 使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时还会使程序员对各线程任务在处理的过程中进行有效的把控与监督. 线程间的通信 思维导图 等待/通知机制 不使用等待/通知机制 我们可以使用使用sleep()与 whle(true) 死循环来实现多个线程间的通信. 虽然两个线程实现了通信,但是线程B必须不断的通过while语句轮训机制来检测某一个条件,这样会浪费CPU资源. 如果轮询间隔较小,更浪费时间间隔.如果轮训时间间隔…
Java基础教程:多线程基础——线程池 线程池 在正常负载的情况瞎,通过为每一个请求创建一个新的线程来提供服务,从而实现更高的响应性. new Thread(runnable).start() 在生产环境中,为每一个任务分配一个线程的方法存在一些缺陷,尤其是需要创建大量线程时: 线程生命周期的开销非常高.线程的创建和销毁是需要代价的. 资源消耗.如果可运行线程数量多于可用处理器数量,那么有些线程将会闲置.大量空闲的线程将会占用许多内存,给垃圾回收器带来压力,而且大量线程在竞争CPU资源时还将产生…
Java基础教程:多线程杂谈——双重检查锁与Volatile 双重检查锁 有时候可能需要推迟一些高开销的对象初始化操作,并且只有在使用这些对象时才进行初始化.此时程序员可能会采用延迟初始化.但要正确实现线程安全的延迟初始化需要一些技巧,否则很容易出现问题.比如,下面是非线程安全的延迟初始化对象的示例代码: public class A{ private Instance instance; public Instance getInstance(){ if(instance==null){ in…
Java基础教程:多线程基础(6)——信号量(Semaphore) 信号量 信号量(Semaphore)由一个值和一个指针组成,指针指向等待该信号量的进程.信号量的值表示相应资源的使用情况.信号量S≥0时,S表示可用资源的数量. 信号量可以被两个操作修改: 执行一次P操作意味着请求分配一个资源,因此S的值减1:当S<0时,表示已经没有可用资源,S的绝对值表示当前等待该资源的进程数.请求者必须等待其他进程释放该类资源,才能继续运行. 执行一次V操作意味着释放一个资源,因此S的值加1:若S<0,表…
Java基础教程:多线程基础(5)——倒计时器(CountDownLatch) 引入倒计时器 在多线程协作完成业务功能时,有时候需要等待其他多个线程完成任务之后,主线程才能继续往下执行业务功能,在这种的业务场景下,通常可以使用Thread类的join方法,让主线程等待被join的线程执行完之后,主线程才能继续往下执行.当然,使用线程间消息通信机制也可以完成.其实,java并发工具类中为我们提供了类似“倒计时”这样的工具类,可以十分方便的完成所说的这种业务场景. 为了能够理解CountDownLa…
本文为 Java 的快速简明教程,主要用于快速了解.学习和复习java的语法特点. // 单行注释 /* 多行注释 */ /** JavaDoc(Java文档)注释是这样的.可以用来描述类和类的属性. */ // 导入 java.util中的 ArrayList 类 import java.util.ArrayList; // 导入 java.security 包中的所有类 import java.security.*; // 每个 .java 文件都包含一个public类,这个类的名字必须和这…
一.方法的返回值   当我们在程序中调用方法时,虚拟机将会跳转到对应的方法中去执行.当以下几种情况发生时,虚拟机将会回到调用方法的语句并继续向下执行: 执行完方法中所有的语句: 遇到return语句: 方法抛出一个异常(有关异常的内容将会在后面的文章中讨论).   这里我们重点介绍return语句.return语句用来返回一个值,当虚拟机遇到return语句时将会立刻结束当前方法并带着返回值回到调用此方法的地方.在声明方法时,返回值的类型要和return语句里返回的值的类型一致.如果方法没有需要…