多线程编程
lin-0410
最痛苦的事情,不是失败了,而是我本可以......
所以,如果目标还没去实现,不要感叹为时已晚,因为种一棵树最好的时间是十年前,其次是现在!
展开
-
多线程编程-单例模式的实现方式(九)
1,饿汉式,也叫立即加载,就是使用类的时候已经将对象创建完毕,常用的方法是直接new实例化。public class SingletonObject { private static SingletonObject sObj = new SingletonObject(); private SingletonObject(){ } public static SingletonOb原创 2018-01-22 11:29:15 · 212 阅读 · 0 评论 -
Android中的线程模型-ThreadPoolExecutor (十二)
上一篇 Android的线程模型:Android线程模型介绍了 Android中使用线程跟java中没有太多区别,只要继承Thread类或者实现Runnable接口就可以,只是这种实现方式要跟主线程通信需要通过message queue;另一种并行编程方法是AsyncTask,这是Android开发的专门简化多线程实现的类,可以不用繁琐的looper,handler等机制就可以与主线程通信,但是A...原创 2018-02-06 19:59:06 · 315 阅读 · 0 评论 -
Android中的线程模型(十一)
转 如何优雅的停止线程:http://www.cnblogs.com/l2rf/p/5566895.htmlAndroid规定只有ui线程,也就是主线程才可以刷新UI,这样的规定的原因是UI操作是非线程安全的,如果允许多个线程同时执行ui操作,就必要加同步,而同步机制会影响执行性能,因为在同步中去wait或notify一个线程,通常都要借助操作系统来完成,所以存在用户线程跟内核线程之间的切换,这个...原创 2018-01-29 09:11:14 · 338 阅读 · 0 评论 -
多线程编程-ReentrantReadWriteLock(八)
ReentrantReadWriteLock类1,ReentrantLock类具有完全互斥排他的效果,即同一时刻只有一个线程在执行ReentrantLock().lock()方法后面的代码。这样做虽然保证了实例变量的线程安全性,到时效率较低。ReentrantReadWriteLock类,包括两个锁,一个是读操作相关的锁,也称共享锁;另一个是写操作相关的锁,也称排他锁。多个读锁之间不互斥,读锁和写原创 2018-01-19 15:50:53 · 198 阅读 · 0 评论 -
多线程编程-ReentrantLock(八)
1,在java多线程中,可以使用synchronized关键字实现线程间同步互斥,也可以使用ReentrantLock达到同样的效果。ReentrantLock拥有一些扩展功能,如:等待可中断,可实现公平锁,锁可以绑定多个条件,尝试锁定等。测试代码:public class MyService { private Lock lock = new ReentrantLock(); public原创 2018-01-19 10:50:48 · 266 阅读 · 0 评论 -
多线程编程-Synchronized同步方法(二)
2.1 synchronized 同步方法 “非线程安全”会在多个线程对同一个对象中的实例变量进行并发访问时发生,产生的后果就是“脏读”,也就是读到的数据其实是被更改过的。 “线程安全”就是获取的实例变量的值是经过同步处理的,不会出现脏读的现象。 2.1.1 方法内的变量是线程安全的 “非线程安全”的问题存在于“实例变量”中,如果是方法内部的私有变量,就是“线原创 2018-01-10 15:40:28 · 328 阅读 · 0 评论 -
多线程编程-线程间通信.wait/notify(四)
多个线程通过共同访问一个变量的方式,也可以实现线程间通信,通过这种方式,线程要主动去读取一个共享变量,一方面需要加同步,另一方面花费了读取变量的时间,但是读取到的值是不是要想要的,并不能确定。而等待/通知机制,可以更好解决线程间数据读取时机的问题。1,不使用等待/通知机制的线程间通信测试代码:public class MyList { private List list = new ArrayL原创 2018-01-16 17:36:27 · 419 阅读 · 0 评论 -
多线程编程-线程间通信-ThreadLocal(七)
1,ThreadLocal类主要解决的是每个线程绑定自己的值,这里存储的是每个线程私有的数据,解决了变量在不同线程间的隔离性。测试代码:public class Tools { public static ThreadLocal tl = new ThreadLocal();}public class ThreadA extends Thread { @Override public v原创 2018-01-18 10:16:02 · 818 阅读 · 0 评论 -
多线程编程-线程间通信-join方法的使用(六)
方法join的使用1,主线程启动子线程后,如果主线程项等子线程执行完成后再结束,就要用到join()方法了。测试代码:public class JoinThread extends Thread{ @Override public void run() { try { int value = (int)(Math.random()*10000); System.out.pri原创 2018-01-17 17:30:59 · 256 阅读 · 0 评论 -
多线程编程-Java线程概述(一)
一,Java多线程技能1.1进程和多线程的概念可以把一个正在操作系统中运行的程序理解为一个“进程”。进程是受操作系统管理的基本运行单元。线程可以理解为在进程中独立运行的子任务。当打开浏览器,下载文件的同时,还可以打开看视频,这些功能就对应了多个线程在后台运行。使用多线程就是在使用异步,因为每个线程被调用的时机是随机的。1.2继承Thread类,实现Runnable接口。实现多线程的方式...原创 2018-01-09 10:12:25 · 230 阅读 · 0 评论 -
多线程编程-线程间通信.管道(五)
通过管道进行线程间通信:字节流(PipedOutputStream,PipedInputStream)在Java中提供了各种各样的输入/输出流Stream,其中管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传送数据。一个线程发送数据到输出管道,另一个线程从输入管道中读数据。使用管道实现线程间的通信,不需要借助类似临时文件之类的东西。测试代码:public class原创 2018-01-17 14:58:50 · 676 阅读 · 0 评论 -
多线程编程-volatile关键字(三)
2.3 volatile关键字Volatile关键字的主要作用是使变量的多个线程间可见。还有一点就是禁止指令重排序。 使用volatile关键字增加了实例变量在多个线程之间的可见性,但是volatile不能保证原子性。关键synchronized和volatile的比较:1)volatile是线程同步的轻量级实现,所以volatile性能比synchronized要好,并且vo原创 2018-01-15 16:00:26 · 290 阅读 · 0 评论 -
多线程编程-线程中异常的处理(十)
1,对指定的线程对象设置默认的异常处理: setUncaughtExceptionHandler()。测试代码:public class MyThread extends Thread{ @Override public void run() { String user = null; System.out.println("--"+user.hashCode());原创 2018-01-22 15:15:46 · 262 阅读 · 0 评论 -
多线程编程-synchronized语句块(二)
2.2 synchronized 同步语句块2.2.1 使用synchronized同步方法时,如果一个线程调用同步方法执行一个长时间的任务,那么其他线程必须等待很长时间,这时用同步语句块可提高执行效率。同步方法耗时测试代码:public class Task { private String getData1; private String getData2; publ原创 2018-01-12 14:36:57 · 230 阅读 · 0 评论 -
ThreadLocal实现原理
如何优雅的停止线程:http://www.cnblogs.com/l2rf/p/5566895.html转 https://www.zhihu.com/question/23089780概述相信读者在网上也看了很多关于ThreadLocal的资料,很多博客都这样说:ThreadLocal为解决多线程程序的并发问题提供了一种新的思路;ThreadLocal的目的是为了解决多线程访问资源时的共享问题。...转载 2018-03-09 07:27:46 · 245 阅读 · 0 评论