文章列表
我的原帖http://blog.sina.com.cn/s/blog_b652201301014bg6.html
今天打完乒乓球,回寝室的路上,一边走一边看(手拿着手机,大概相对于水平面倾斜20-30度)IT行业老大们的微博。其中一条李开复老 ...
一、创建一个Server端
1、创建一个ServerSocket端,并绑定一个端口
ServerSocket serverSockdet = new ServerSocket(port);
2、接收客户端连接
Socket socket = serverSocket.accept();
3、处理客户端请求
伪代码: ...
一、NIO只是同步非阻塞
阻塞:应用程序在获取网络数据的时候,如果网络带宽传输慢,那么应用程序会一直阻塞等待着,直到完整接收完服务端的请求后
非阻塞:应用程序可以读取准备就绪好的数据,不需要等待
TCP连接握手,客户端发送请求给服务端,服务端通过header告诉客户端,这次请求会有多大的数据传输给你,然后发送数据给客户端,但是客户端由于网络带宽原因,一直卡着,就会影响读取效率
BIO:同步阻塞
NIO:同步非阻塞
AIO:异步非阻塞,JDK1.7实现
同步与异步是相对于操作系统 ...
一、Quene
1、ConcurrentLinkerQuene不限大小的高并发、高性能无阻塞的队列,添加元素add(),offer(),取出元素:poll(),peek()
poll()与peek()区别:poll()取出后,会删除队列元素,peek()不会删除
2、blockingQuene
ArrayBlockingQuene:基于数组的队列阻塞队列,在ArrayBlockingQune内部维护了一个定长数组,以缓存队列的数据对象,内部没有实现读写分离,也就意味着生产和消费不能并 ...
CountDownLatch:一个线程或多个线程,必须等待其他N个线程完成后,才能继续往下执行
private static CountDownLatch countDownLatch = new CountDownLatch(5);
countDownLatch.countDown();
countDownLatch.await();
主线程阻塞等待,必须5个线程执行完才往下执行,子线程每执行调用countDown()
CyclicBarrier:N个线程互相等待,必 ...
一、单例模式
1、双重检查
public class SingletonClass {
private void SingletonClass(){}
private static SingletonClass singletonClass = null;
public static SingletonClass getInstance() {
if (singletonClass == null) {
// try { ...
一、同步类容器
1、传统的同步类容器Vector,HashTable,为什么是安全型的,是因为在内部功能都是采用JDK的Collections.synchronizedXXX()实现,底层机制就是传统的关键字synchronized对每个方法实现同步。
public synchronized boolean add(E e) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elem ...
一、线程间的通信
1、wait,notify
两个要结合使用,必须放在synchronized代码块或方法中,采用对象锁进行wait,notify
public class WaitNotifyTest {
private volatile List<String> list = new ArrayList<Stri ...
一、线程安全锁-synchronized
1、什么是线程安全:当多个线程访问一个类对象或方法时,该对象或方法都能表现正确行为,就是线程安全
2、synchronized:可以用在代码块或方法上
public class SynchronizedTest extends Thread {
private int count = 5;
@Override
public void run() {
count --;
System.o ...
1、volatile关键字主要使变量在多线程中可见
什么叫可见,就是在我在主线程中有个volatile变量,多线程中其中一个线程改了这个值,那么我希望其他线程读取到最新的值,就是可见。就是这个变量的改变我其他线程都能读到最新的
public class VolatileTest {
public boolean isRunning = true;
public void setRunning(boolean flag) {
this.isRunning ...
RPC服务器可以让你从远程机器上发起过程调用。利用这个基于TCP的RPC服务器,人们只需要一个简单的TCP客户端就能连上erlang节点、执行erlang命令,并检查执行结果。
不过这个RPC应用部署到 ...
在上一篇文章中我们说过,RPC应用部署到线上服务器上会造成一个安全漏洞,那么下面我们简单介绍一下OTP应用与监督机制,并把上一篇文章中的代码优化一下。
整个Erlang/OTP生态系统的目的就在于构建稳定、容错的系统。首先介绍两个新的基本概念:
应用:应用是Erlang对相关模块进行打包的一种手段。打包的目的并不在于发布,而在于是这些模块称为一个整体。
监督者:监督者是OTP最为重要的一个特性。他们负责监控其他进程,并在出问题时重启故障进程或向上汇报侦测到的问题。
应用
创建OTP ...
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
操纵进程:
1.派生和链接
进程派生函数有两个:第一个函数仅有 ...
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp2
{
...
相信很多朋友都知道,erlang的强大和高效。那么接下来分析一下erlang的一些简单的基础知识。
启动和退出shell:
首先,从启动erlang shell说起,启动shell,只需在vim编辑器中 ...