单例模式好多书上都是这么写的: 但是实际开发中是不会这么写的,因为有一个严重的问题,多线程并发访问的时候,可能会产生多个实例!! 下面列举几个常用的方法: 1.使用synchronized 关键字 2.加锁 3.利用静态变量: 以上就是常用的创建单例的模式: Test测试代码: 输出: 是同一个th ...
分类:
编程语言 时间:
2016-09-21 13:12:39
阅读次数:
185
lock 关键字可以用来确保代码块完成运行,而不会被其他线程中断。它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。这是通过在代码块运行期间为给定对象获取互斥锁来实现的。 ...
分类:
编程语言 时间:
2016-09-21 12:50:11
阅读次数:
207
//内部类实现多线程 new Thread(){ public void run(){ for(int i=0;i<50;i++){ System.out.println("play game" + i); } } }.start(); //内部类实现多线程 new Thread(new Runna ...
分类:
编程语言 时间:
2016-09-21 10:20:26
阅读次数:
127
在java多线程程序中,所有线程都不允许抛出未捕获的checked exception(比如sleep时的InterruptedException),也就是说各个线程需要自己把自己的checked exception处理掉。这一点是通过java.lang.Runnable.run()方法声明(因为此 ...
分类:
编程语言 时间:
2016-09-21 01:42:34
阅读次数:
201
Question:在并发编程中,多个线程之间采取什么机制进行通信(信息交换),什么机制进行数据的同步? Answer:在Java语言中,采用的是共享内存模型来实现多线程之间的信息交换和数据同步的。 线程之间通过共享程序公共的状态,通过读-写内存中公共状态的方式来进行隐式的通信。同步指的是程序在控制多 ...
分类:
编程语言 时间:
2016-09-21 01:31:12
阅读次数:
167
进程:正在进行中的程序(直译),其实对应于一个应用程序在内存中所开辟的空间。 线程:就是进程中的一个负责程序执行的控制单元,也叫执行路径。 一个进程中,可以有多个执行路径,称之为多线程。 比如360安全卫士,开启360安全卫士,就是开启了一个进程 清理垃圾的同时,还可以扫描病毒等,即多线程。 一个进 ...
分类:
编程语言 时间:
2016-09-20 22:38:26
阅读次数:
227
构建线程安全的类
volatile
只保证数据可见性,不保证数据同步。也就是说,JVM只保证使用了volatile的数据变更后对所有线程暴露最新值,并不会对线程内部缓存数据的操作多限制。多线程同时变更某个共享的volatile数据并不会产生正确结果。
在满足以下条件..
分类:
编程语言 时间:
2016-09-20 18:19:03
阅读次数:
165
jAVA基础提高文件复制性能之多线程复制文件利用IO流中的随机访问文件RandomAccessFile和文件通道FileChanne复制文件可大大提高文件的读写效率,在此基础上利用多线程复制文件使其性能更优。因线程的个数可根据文件的大小及需求而定。其大概原理是根据给定的线程个数,将文件分..
分类:
编程语言 时间:
2016-09-20 18:16:32
阅读次数:
228
这几天突然对协程感兴趣,于是自己实现了一个,代码放在github上:https://github.com/adinosaur/Coro 协程是一种用户空间的非抢占式线程,主要用来解决等待大量的IO操作的问题。 协程vs线程 对比使用多线程来解决IO阻塞任务,使用协程的好处是不用加锁,访问共享的数据不 ...
分类:
编程语言 时间:
2016-09-20 16:39:25
阅读次数:
210
在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。今天我们来讨论另外一类容器:阻塞队列。 在前面我们接触的队列都是非阻塞队列,比如 ...
分类:
编程语言 时间:
2016-09-20 12:00:04
阅读次数:
258