Java并发问题--乐观锁与悲观锁以及乐观锁的一种实现方式-CAS

首先介绍一些乐观锁与悲观锁:  悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。再比如Java里面的同步原语synchronized关键字的实现也是悲观锁。  乐观锁:顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库提供的类似于write_condition机制,其实都是提供的乐观锁。在Java中java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁的一种实现方式CAS实现的。 乐观锁的一种实现方式-CAS(CompareandSwap比较并交换):  锁存在的问题:    Java在JDK1.5之前都是靠synchronized关键字保证同步的,这种通过使用一致的锁定协议来协调对共享状态的访...

C语言开发工具

1.编写程序的工具:  indent命令将自动调整C代码的缩进风格,个人比较喜欢indent-kr2.编译C语言程序:  1.gcc编译器:    gcc是一个ANSIC兼容编译器,C++编译器也可以编译C程序,事实上g++编译器内部还是调用了gcc    gcc命令可以启动C编译系统,当执行gcc时,它将完成预处理、编译、汇编和连接4个步骤并最终生成可执行代码,产生的可执行程序默认被保存为a.out文件。gcc处理的    各种文件类型包括:      静态链接库(.a)、共享链接库(.so)、C语言源文件(.c)、C++源文件(.C.c或者.cpp)、汇编语言文件(.s)、预处理文件(.i)、目标代码文件(.o)    gcc[options]filename-list 注意不能在一个单独的连接字符后面跟一组选项  2.函数库:    标准系统库文件一般存放在Linux文件系统/lib和/usr/lib目录中。    默认情况下,C语言编译器只搜索标准C语言库,要想它搜索到其他库文件,要把库文件放到标准目录中,库文件必须遵循特定的命名规范并且需要在命令行中明确指定;   ...
代码星球 代码星球·2020-03-29

java.util.concurrent详解(四) BlockingQueue

7.BlockingQueue   “支持两个附加操作的Queue,这两个操作是:获取元素时等待队列变为非空,以及存储元素时等待空间变得可用。“   这里我们主要讨论BlockingQueue的最典型实现:LinkedBlockingQueue和ArrayBlockingQueue。两者的不同是底层的数据结构不够,一个是链表,另外一个是数组。      后面将要单独解释其他类型的BlockingQueue和SynchronousQueue   BlockingQueue的经典用途是生产者-消费者模式   代码如下:Java代码 import java.util.Random;  import java.util.concurrent.BlockingQueue;  import java.util.concurrent.Linke...
当地较为有名的狠人 当地较为有名的狠人·2020-03-29

java.util.concurrent详解(三)ScheduledThreadPoolExecutor

6.ScheduledThreadPoolExecutor   我们先来学习一下JDK1.5API中关于这个类的详细介绍:   "可另行安排在给定的延迟后运行命令,或者定期执行命令。需要多个辅助线程时,或者要求ThreadPoolExecutor具有额外的灵活性或功能时,此类要优于Timer。   一旦启用已延迟的任务就执行它,但是有关何时启用,启用后何时执行则没有任何实时保证。按照提交的先进先出(FIFO)顺序来启用那些被安排在同一执行时间的任务。   虽然此类继承自ThreadPoolExecutor,但是几个继承的调整方法对此类并无作用。特别是,因为它作为一个使用corePoolSize线程和一个无界队列的固定大小的池,所以调整maximumPoolSize没有什么效果。"   在JDK1.5之前,我们关于定时/周期操作都是通过Timer来实现的。但是Timer有以下几种危险[JCIP]a.Timer是基于绝对时间的。容易受系统时钟...

java.util.concurrent详解(二)Semaphore/FutureTask/Exchanger

-----------------------------------------------------------------------------3.Semaphore   我们先来学习一下JDK1.5API中关于这个类的详细介绍:“一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个acquire(),然后再获取该许可。每个release()添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore只对可用许可的号码进行计数,并采取相应的行动。”   我们一般用它来控制某个对象的线程访问对象   例如,对于某个容器,我们规定,最多只能容纳n个线程同时操作使用信号量来模拟实现具体代码如下(参考[JCIP])Java代码 import java.util.Collections;  import java.util.HashSet;  import&nb...

java.util.concurrent详解(一) Latch/Barrier

Java1.5提供了一个非常高效实用的多线程包:java.util.concurrent,提供了大量高级工具,可以帮助开发者编写高效、易维护、结构清晰的Java多线程程序。从这篇blog起,我将跟大家一起共同学习这些新的Java多线程构件1.CountDownLatch   我们先来学习一下JDK1.5API中关于这个类的详细介绍:“一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。用给定的计数初始化CountDownLatch。由于调用了countDown()方法,所以在当前计数到达零之前,await方法会一直受阻塞。之后,会释放所有等待的线程,await的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置。如果需要重置计数,请考虑使用CyclicBarrier。”   这就是说,CountDownLatch可以用来管理一组相关的线程执行,只需在主线程中调用CountDownLatch的await方法(一直阻塞),让各个线程调用countDown方法。当所有的线程都只需完cou...
当地较为有名的狠人 当地较为有名的狠人·2020-03-29

关于java程序模拟https请求的问题请教

现在我遇到一个问题,需要用java模拟一次https请求,发送一个xml数据,我不知道怎么样才能带上认证信息。有知道的么?提示一下,谢谢了我搞了一个周了,没搞明白ca的证书怎么样才能加载到https的请求里去.....悲哀啊,走过路过的别忘了帮顶下,谢谢了...
当地较为有名的狠人 当地较为有名的狠人·2020-03-29

java之xml解析

    项目里要用到xml解析,所以需要写一个java的xml解析工具类。因此特地去网上看了一下java,解析xml的例子,发现网上找到的大都只有代码例子,在实际的过程中也出了不少问题,所以想写一篇关于xml解析的基础文章,记录一下自已在学习过程中遇到的一些问题。    DOM(文档对象模型)是HTML和XML文档的编程接口规范,与平台和语言无关,模型定义了HTML和XML在内存中的逻辑结构,提供了访问和存取HTML和XML文档的方法,可以说要自由的操纵XML文档就要用到DOM规范。    解析XML的第一步是要获得一个文档解析器,将一个XML文档转化为一个DOM文档。Document接口描述了对应于整个XML的文档树,并提供了对数据的访问         //先获取产生DocumentBuilder工厂      &n...
当地较为有名的狠人 当地较为有名的狠人·2020-03-29

java 使用苹果主题风格 窗口透明酷炫效果

  importjava.awt.Color;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JOptionPane;importjavax.swing.JPanel;importjavax.swing.SwingUtilities;importjavax.swing.UIManager;importcom.sun.awt.AWTUtilities;publicclassMainFrameextendsJFrame{privateJButtonbutton;privateJPanelpanel;publicMainFrame(){panel=newJPanel();panel.setBounds(0,0,this.getWidth(),this.getHeight());panel.setBackground(Color.RED);butto...
当地较为有名的狠人 当地较为有名的狠人·2020-03-29

全面分析iterator(迭代器)模式,以及具体java实例

先上一个iteratordesignpattern(迭代器模式)的类图。Aggregat是一个抽象的集合体,ConcreteAggregat是Aggregat的一种实现,iterator表示一个迭代器的通用接口。在javaAPI中这个接口的定义为:java.utilinterfaceIterator<E>{booleanhasNext();Enext();voidremove();}ConcreteIterator是针对于ConcreteAggregate这个特定的集合体对Iterator的一个实现。注意ConcreteIterator和ConcreteAggregate的关系是关联,也就是ConcreteIterator中包含一个ConcreteAggregate的实例,而接口函数的实现(implement)正是基于这个实例。反之ConcreteAggregate和ConcreteIterator的关系是依赖,意思就是ConcreteAggregate的一些方法的实现一些功能的实现需要依赖于ConcreteIterator,在具体java语言中这一点体现在classCon...
当地较为有名的狠人 当地较为有名的狠人·2020-03-29

Java IO 与 编码 浅析,希望大家多多指教

这些天,研究了下javaIO与编码相关的问题,希望和大家探讨一下,欢迎拍砖,共同提高。可以转载,但是请表明原作者mubing_s。首先我们都知道,javaIO的输入流顶层类有两个:java.io.Reader(字符流)和java.io.InputStream(字节流),本文要做的是深入细节来解析字符流和字节流在处理文本读入时到底是怎么做的。先请移步看个小代码:packagelearn;importjava.io.*;classGo{publicstaticvoidmain(Stringargs[])throwsFileNotFoundException,IOException{FileReaderfr=newFileReader("xx.txt");//System.out.println(fr.getEncoding());intnum;while((num=fr.read())!=-1){System.out.println(Integer.toHexString(num));}fr.close();System.out.println("--------------------"...
当地较为有名的狠人 当地较为有名的狠人·2020-03-29

Javascript导航菜单13则

来源:http://www.noupe.com/ajax/13-awesome-java-script-css-menu.html翻译:http://parandroid.com下面为你准备了13个利用Javascript实现的网页导航菜单1)SexySlidingMenu-基于mootools的Javascript网页导航菜单,漂亮的滑动门技术,看到下面的图了没有,用它来设计你的Sidebar,非常之炫,Sexy,是的。Demo:MootolsVersionDemo:Script.aculo.usVersion2)FastFindMenuScript-这个脚本基本动态的Ajax技术,可以让你创建多级嵌套的菜单。Demo:FastFindMenu3)Webber2.0DockMenu-一个典型的Dock类型网页导航菜单。Demo:Webber2.0DockMenu4)Phatfusion-ImageMenu-这这是一个使用Javascript的图片导航菜单,它最大的特点是除了悬浮展开图片链接之外,还保持当前选定的菜单链接状态。Demo:Phatfusion-ImageMenuDemo:...
当地较为有名的狠人 当地较为有名的狠人·2020-03-29

Java IO流分析整理

ava中的流,可以从不同的角度进行分类。按照数据流的方向不同可以分为:输入流和输出流。按照处理数据单位不同可以分为:字节流和字符流。按照实现功能不同可以分为:节点流和处理流。 输出流:  输入流: 因此输入和输出都是从程序的角度来说的。字节流:一次读入或读出是8位二进制。字符流:一次读入或读出是16位二进制。字节流和字符流的原理是相同的,只不过处理的单位不同而已。后缀是Stream是字节流,而后缀是Reader,Writer是字符流。 节点流:直接与数据源相连,读入或读出。 直接使用节点流,读写不方便,为了更快的读写文件,才有了处理流。处理流:与节点流一块使用,在节点流的基础上,再套接一层,套接在节点流上的就是处理流。 Jdk提供的流继承了四大类:InputStream(字节输入流),OutputStream(字节输出流),Reader(字符输入流),Writer(字符输出流)。以下是java中io中常用的流。 字节输入流:字节输出流:字符输入流:字符输出流: 简单介绍其上图:对文件进行操作:Fi...
当地较为有名的狠人 当地较为有名的狠人·2020-03-29

java的8种排序

8种排序之间的关系:   1, 直接插入排序  (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2]个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。 (2)实例  (3)用java实现 packagecom.njue;publicclassinsertSort{publicinsertSort(){inta[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};inttemp=0;for(inti=1;i<a.length;i++){intj=i-1;temp=a[i];for(;j>=0&&temp<a[j];j--){a[j+1]=a[j];//将大于temp的值整体后移一个单位}a[j+1]=temp;}for(inti=0;i<a.le...
当地较为有名的狠人 当地较为有名的狠人·2020-03-29

java多线程下载

importjava.io.InputStream;importjava.io.RandomAccessFile;importjava.net.HttpURLConnection;importjava.net.URL;publicclassDownLoader{//多线程文件下载//使用HTTP的Range字段指定每条线程从文件的什么位置开始下载,如从文件的2mb位置下载就是bytes=2097252,2MB的字节publicstaticvoidmain(String[]args){//主方法DownLoaderd=newDownLoader();try{d.download();}catch(Throwablee){//TODOAuto-generatedcatchblocke.printStackTrace();}}publicvoiddownload()throwsThrowable{Stringfilename="QQGAME.exe";//取文件名//得到下载路径Stringpath="http://dldir3.qq.com/minigamefile/QQGame2013B...
当地较为有名的狠人 当地较为有名的狠人·2020-03-29
首页上一页...556557558559560...下一页尾页