- 浏览: 652598 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (153)
- 多线程 (13)
- 数据库连接池 (3)
- maven (9)
- jquery (2)
- struts (5)
- spring (6)
- hibernate (10)
- mybatis (15)
- eclipse插件 (6)
- 短信SI行业 (3)
- oracle数据库 (6)
- junit (1)
- H2数据库 (1)
- sql server 数据库 (2)
- java通讯 (9)
- java序列化与反序列化 (3)
- java分布式缓存 (2)
- 线程池 (3)
- linux系统 (5)
- 企业级问题解决方案 (7)
- JDBC (1)
- uml (2)
- 设计思想与实现 (10)
- 面试 (3)
- ant (2)
- xml (1)
- soa (1)
- 设计模式 (7)
- java垃圾回收机制 (1)
- 工具和框架 (2)
- 其他 (8)
- 程序规范 (1)
- google code 建立svn (1)
- netty (1)
- JPA (1)
- jboss (2)
- RMI (1)
最新评论
-
nnxiaod:
hackpro 写道如果你这里有多个参数,怎么传值了selec ...
MyBatis中Association联合select使用 -
nnxiaod:
引用不管输入参数名称是什么,mybatis最终会执行: 效果为 ...
MyBatis中Association联合select使用 -
a942010:
哪里调用了返回的结果集是menuMap啊?只有后面一点。
MyBatis中Association联合select使用 -
Java-feifeiok:
弄个全点的例子啊!@
MyBatis中Association联合select使用 -
Java-feifeiok:
弄个全点的例子啊
MyBatis中Association联合select使用
线程阻塞队列
文章分类:Java编程
摘自别人,仅供分析
- /*
- 编写一个线程安全、大小固定的队列
- 提供阻塞式的方法put,若队列没有空间,则方法put会一直等待
- 提供阻塞式的方法take,若队列为空,则方法take会一直等待
- 启动30个线程操作该队列,每个线程进行一次put和一次take操作
- */
- /*
- 已经按照顺序获得读锁和写锁了,但是如果启动30个线程的话,基本上每次都会死锁,线程都停在read_lock.wait()的位置,
- 如果启动20个线程就只有一半的几率会死锁(其实都在等待read_lock的锁,不能说是死锁),但每一个线程take一次必然会put一次,
- 或者反过来,按说是不会有都等待read_lock的情况
- */
- package com.huawei.test;
- import java.util.*;
- public class Queue1
- {
- final int SIZE = 10; //队列固定大小
- ArrayList store = new ArrayList(SIZE);
- Object write_lock = new Object();//用于对store的写操作,如get/add/set/remove
- Object read_lock = new Object(); //用于对store只读操作,如取size
- public Queue1(){}
- public void put (Object o) //没有空间一直等待
- {
- while(true){
- synchronized(read_lock){
- try{
- if(store.size() == SIZE){
- read_lock.wait();//如果队列已满,就释放锁
- }else{
- synchronized(write_lock){
- Thread.sleep(50);
- store.add(o); //增加元素到队列
- System.out.println(Thread.currentThread().getName() + "****PUT::Size=" + store.size());
- Thread.sleep(50);
- read_lock.notifyAll(); //通知其他线程
- break;
- }
- }
- }catch(Exception ex){
- ex.printStackTrace(System.err);
- }
- }
- }
- }
- public Object take () //没有数据一直等待
- {
- while(true){
- synchronized(read_lock){
- try{
- if(store.size() == 0){
- read_lock.wait();//如果队列没有数据,就释放锁
- }else{
- synchronized(write_lock){
- Thread.sleep(50);
- Object obj = store.remove(0); //从队列头移走数据
- System.out.println(Thread.currentThread().getName() + "****Take::Size=" + store.size());
- Thread.sleep(50);
- read_lock.notifyAll();//通知其他线程
- return obj;
- }
- }
- }catch(Exception ex){
- ex.printStackTrace(System.err);
- }
- }
- }
- }
- public static void main(String[] args){
- Queue1 queue1 = new Queue1(); //创建一个队列
- for(int i = 0; i < 30; i++){ //启动30个线程访问队列
- TestThread thread = new TestThread(queue1,i);
- System.out.println( "--Thread:" + i + " Start!" );
- thread.start();
- try{
- Thread.sleep(10); //没隔十毫秒启动一个线程
- }catch(Exception ex){
- ex.printStackTrace(System.err);
- }
- }
- }
- }
- class TestThread extends Thread
- {
- Queue1 queue1 = null;
- int sn = 0;
- public TestThread(Queue1 queue1,int sn){
- this.queue1 = queue1;
- this.sn = sn;
- setName("Thread::" + sn); //以序号作为线程名
- }
- public void run(){
- String tmp = null;
- try{
- if( sn < 7){ //sn小于7的线程先put,后take
- tmp = "Thread-PUT::" + sn + "---put::";
- queue1.put(tmp);
- Thread.sleep(10);
- tmp = "Thread-Take::" + sn + "---take::";
- Object obj = queue1.take();
- }else{ //sn大于7的线程先take,后put
- tmp = "Thread-Take::" + sn + "---take::";
- Object obj = queue1.take();
- Thread.sleep(10);
- tmp = "Thread-PUT::" + sn + "---put::";
- queue1.put(tmp);
- }
- System.out.println("Thread::" + sn + " task over!");
- }catch(Exception ex){
- ex.printStackTrace(System.err);
- }
- }
- }
发表评论
-
resetful技术应用框架
2013-04-24 16:47 2676resetful的post 请求发送框架 ... -
Java线程:新特征-阻塞队列
2013-04-16 16:12 1233Java线程:新特征-阻塞队列 阻塞队列是Java5 ... -
disruptor----Concurrent Programming Framework...
2012-09-10 08:57 1501disruptor发布了Java的2.0版本(.Net版 ... -
Lock wait timeout exceeded; try restarting transaction一些信息 .
2012-03-22 09:47 2244锁等待超时。是当前事务在等待其它事务释放锁资源造成的。 ... -
生产者与消费者(买票和卖票多线程协作)
2011-11-02 10:04 1671简单模型: ... -
Lock与synchronized 的区别
2011-11-01 14:12 1408本人摘自:http://houlinyan ... -
Thread守护线程
2011-11-01 11:36 1802在某段程序中看到了Thread.setDaemon的用法,经过 ... -
线程间协作wait()与notify()
2011-11-01 10:40 1160使用wait()与notify()/notifyAll()可以 ... -
sleep()和wait()的区别
2011-11-01 10:27 1148Java中的多线程是一种抢占式的机制而不是分时机制。线程主要 ... -
Thread.sleep使用详解
2011-11-01 10:26 1705我们可能经常会用到 ... -
多线程性能及效率问题
2011-10-13 15:17 11243一、[多线程概要] ... -
java远程通讯可选技术
2011-06-27 16:15 1294原文地址:http://java.chinai ... -
Java序列化(三)之transient
2011-06-27 16:13 14741、java的serialization提供了一个非常棒的存储 ... -
Java序列化(二)
2011-06-27 16:05 10641、序列化是干什么的? 简单说就是为了保存在内存中 ... -
Java序列化(一)
2011-06-27 16:02 1107控制序列化就是有选择的序列化对象,而不是把对象的所以内容都 ... -
线程池与工作队列
2011-05-30 14:00 1151为什么要用线程池? 诸如 Web 服务器、数据库服务器、文件 ... -
长短信实现系列之移动CMPP2.0(转)
2011-05-13 09:41 2529长短信实现系列之 ... -
Socket 长连接与短连接,心跳
2011-04-20 14:04 7575长连接与短连接 所谓长连接,指在一个TCP连接上可以连续 ... -
线程池的介绍及简单实现
2011-04-20 13:35 1137服务器程序利用线程技 ... -
并发性与并行性
2011-04-15 10:14 1555并发性是指两个或多个 ...
相关推荐
"Java Socket学习---单线程阻塞"这个主题主要探讨了如何使用Java的Socket类进行单线程的阻塞式通信,这种模式通常用于简单的客户端-服务器应用。在这个场景中,服务器端通过一个线程处理一个客户端的请求,当请求被...
在服务端应用程序的主线程中不停的调用accept操作,以使服务端程序能不停地接受客户端程序发送...详见链接:Winsocket 二:多线程阻塞服务器程序(tcp),http://blog.csdn.net/u013071074/article/details/26340707
"普通的SOCKET多线程阻塞模型"是指使用标准的Socket接口,结合多线程技术实现的一种通信模型,它广泛应用于VC(Visual C++)开发环境中。在这一模型中,每个线程负责处理一个连接,当线程在进行读写操作时,如果数据...
本实验“winsock多线程阻塞通信”主要关注如何在多线程环境中使用Winsock进行阻塞式的网络通信,这是一种基础但重要的编程技术,尤其在服务器端编程中广泛应用。 首先,我们要理解什么是阻塞与非阻塞模式。阻塞模式...
本文主要探讨了如何在C#中实现非阻塞的异步方法调用,以避免线程阻塞,从而提高程序效率。 首先,我们需要理解同步与异步调用的区别。同步方法调用是传统的调用方式,当一个线程调用一个函数,如`Foo()`,它会等待...
在标题和描述中提到的“实时接收发送消息(接收消息线程阻塞,发送消息线程唤醒)”是一个典型的并发编程问题,涉及到线程管理和通信。以下是对这个主题的详细讲解: 1. **线程与并发**: - 线程是程序执行的最小...
本文将深入探讨标题和描述中提到的“多线程阻塞式网络编程socket”相关的知识点。 首先,我们需要理解“socket”。Socket是操作系统提供的一个接口,允许应用程序进行网络通信。它就像一个通信端口,通过它可以发送...
本篇将深入探讨“单线程阻塞TCP Server&Client程序”的相关知识点。 首先,我们来理解“单线程”概念。在计算机程序中,线程是程序执行的最小单位,一个进程可以有多个线程。单线程意味着整个程序只有一个执行线程...
本视频教程“010_android 之UI线程阻塞及其优化”深入探讨了这一主题,下面是对相关知识点的详细解析。 一、UI线程的重要性 Android系统为了保证用户界面的流畅性,规定所有的UI操作都必须在UI线程中执行。这是因为...
本示例旨在介绍如何在TCP协议的客户端和服务器端实现多线程阻塞模式,这对于初学者理解网络编程的原理及其应用是非常有价值的。 首先,让我们理解什么是阻塞模式。在TCP编程中,阻塞模式意味着当一个线程调用recv或...
这篇我们将深入探讨`AsyncTask`的基本概念和工作原理,以及如何避免线程阻塞。 `AsyncTask`主要包含三个泛型参数:`Params`、`Progress`和`Result`,分别代表任务的输入参数类型、后台执行过程中的进度类型和最终...
本教程主要探讨的是如何在Java中使用Socket实现多线程阻塞式通信,这通常涉及到服务器端(EchoServer)和客户端(EchoClient)的设计。在本文中,我们将详细解析`EchoServer.java`、`SocketUtils.java`和`EchoClient...
我们经常会进行一些比较复杂的计算和算法实现,或者是在某些特定的情况下会实例化一些类。...可以通过开启子线程,将复杂计算内容交给子线程来处理,主线程主要进行UI的渲染操作,这样同样能够解决线程阻塞的问题。
读书笔记:C#网络编程与JAVA网络通信。TCP, UDP的Socket编程多线程阻塞非阻塞等。
在软件开发中,尤其是涉及到用户界面(UI)的应用程序,线程阻塞是一个常见的性能问题。线程阻塞指的是一个线程在等待某个条件满足或资源释放时,无法继续执行的状态。这通常会导致应用程序响应变慢,甚至出现卡顿、...
阻塞队列是一种在多线程编程中广泛使用的并发数据结构,它在计算机科学和编程领域,特别是Java和C++等面向对象语言中扮演着重要角色。标题中的“支持多线程和泛型的阻塞队列”意味着我们讨论的是一个能够同时处理多...
1、查看网络上的图片 2、主线程阻塞-ANR 3、刷新UI-Handler 4、在本地缓存图片-例如微信的图片 5、获取开源代码 6、显示一个新闻客户端 7、使用GET方式提交表单数据 8、使用POST方式提交表单
然而,当你设置`async: false`时,`AJAX`请求会变成同步的,这会导致一些潜在的问题,就像你在项目中遇到的UI线程阻塞问题。 同步`AJAX`请求意味着JavaScript引擎会等待该请求完成才会继续执行后续的代码。在这种...
用MFC实现串口编程, 本文详细介绍了串行通信的基本原理,以及在Windows NT、Win98环境下用MFC ...并给出用Visual C++6.0 编写的相应MFC32位应用程序。...API、MFC32位应用程序、事件驱动、非阻塞通信、多线程.
在Java多线程编程中,LockSupport类是一个重要的工具,它提供了一种低级别的线程阻塞和唤醒机制。LockSupport并不像synchronized或java.util.concurrent.locks包中的Lock接口那样提供锁的完整功能,但它提供了两个...