对编程语言的基础知识:分支、选择、循环、面向对象等基本概念后,我们需要对java高级编程有一定的学习,这里不可避免的要接触到多线程开发。由于多线程开发整体的系统比较大,我会写一个系列的文章总结介绍 多线程开发的概念、使用、线程状态、同步、线程池。希望与大家共勉。在第一部分,也就是本节我们先介绍下 什...
分类:
编程语言 时间:
2015-02-07 01:40:57
阅读次数:
261
多线程编程一直是学员们比较头痛和心虚的地方,因为线程执行顺序的不可预知性和调试时候的困难,让不少人在面对多线程的情况下选择了逃避,采用单线程的方式,其实只要我们对线程有了明确的认识,再加上java内置的对多线程的天然支持,多线程编程不再是一道难以逾越的鸿沟。进程、线程、并发执行首先我们先来认识一下进...
分类:
编程语言 时间:
2015-02-05 17:46:24
阅读次数:
165
Java多线程之线程池
首先强调一点,池是一种设计模式,也就是说好多的成本比较高的连接了这些为了提供性能,用一个池来做缓存。比如说字符串池,比如说数据库连接池,这里介绍下线程池。
系统启动一个线程的成本还是比较高的,因为它涉及和操作系统交互。具体的设计思路和数据库连接池差不多:
线程池在系统启动时创建大量空闲的线程,程序将一个Runnable对象传给线程池,线程池会启动一...
分类:
编程语言 时间:
2015-02-05 16:28:31
阅读次数:
164
Java多线程之线程的通信
在总结多线程通信前先介绍一个概念:锁池。线程因为未拿到锁标记而发生的阻塞不同于前面五个基本状态中的阻塞,称为锁池。每个对象都有自己的锁池的空间,用于放置等待运行的线程。这些线程中哪个线程拿到锁标记由系统决定。前面我们也有T到死锁的概念,线程互相等待其他线程释放锁标记,而又不释放自己的;造成无休止地等待。当出现死锁的时候,我们应该如何解决呢?通过线程间的通信解决。
...
分类:
编程语言 时间:
2015-02-05 13:46:25
阅读次数:
232
Java多线程之线程的同步
实际开发中我们也经常提到说线程安全问题,那么什么是线程安全问题呢?
线程不安全就是说在多线程编程中出现了错误情况,由于系统的线程调度具有一定的随机性,当使用多个线程来访问同一个数据时,非常容易出现线程安全问题。具体原因如下:
1,多个线程同时访问一个数据资源(该资源称为临界资源),形成数据发生不一致和不完整。
2,数据的不一致往往是因为一个线...
分类:
编程语言 时间:
2015-02-04 16:41:20
阅读次数:
241
Java多线程之线程的控制
线程中的7 种非常重要的状态:
初始New、可运行Runnable、运行Running、阻塞Blocked、锁池lock_pool、等待队列wait_pool、结束Dead
如果将“锁池”和“等待队列”都看成是“阻塞”状态的特殊情况,那么可以将线程归纳为5个状态:
新建,就绪,运行,阻塞,死亡。
...
分类:
编程语言 时间:
2015-02-04 13:02:24
阅读次数:
227
我们知道java有很多线程安全的容器类,我们也知道如果把可变状态的管理交给这些线程安全类来管理就可以实现线程安全,但是我们还可能遇到不可想象的问题。
例如:
package com.home.thread.thread8;
import java.util.Vector;
/**
* @author gaoxu
* 实践出真知!
*/
public class VectorQueue...
分类:
编程语言 时间:
2015-02-04 02:01:51
阅读次数:
256
现在,通过前几篇的总结,我们对Java多线程已经有所了解了,但是都是一些Java并发程序设计基础的底层构建块。对于实际编程来说,我们应该尽可能的远离底层结构。使用那些由并发处理的专业人士实现的较高层次的结构要方便的多,安全的多。
阻塞队列
对于许多线程问题。可以通过使用一个或多个队列以优雅且安全的方式将其形式化。生产者线程向队列插入元素,消费者线程则取出他们。使用队列,可以安全...
分类:
编程语言 时间:
2015-02-03 23:08:11
阅读次数:
489
好久没有更博客了,最近一直在忙工作的事情。现在终于空下来了,这2天会抓紧时间整理多线程和socket,把JavaSE结束掉。
关于多线程,首先会涉及到哪些东西呢?首先要了解线程,为什么要使用线程,线程有什么优势,线程和进程有什么区别呢?了解过大致的线程内容后,就应该编码来实现Java的多线程了。首先2种方式来创建线程类,然后调用对应的API来控制线程。然后还剩下一个最大的也是最重要的一块...
分类:
编程语言 时间:
2015-02-03 17:15:07
阅读次数:
176
现在有这样一个任务,有一份手机号列表(20W),有一份话单的列表(10W),要统计哪些手机号没有出现在话单中,哪些手机号在话单中出现了不止一次。
想到的最直接的方式,就是两层循环去遍历,虽然此方法比较笨,但目前还没有想出更好的办法。
一开始使用单线程来处理,代码是随手写的并没有进行重构,只是做一个简单的说明:
package tool;
import java.util.List;
pu...
分类:
编程语言 时间:
2015-02-03 01:55:28
阅读次数:
250