拉取镜像 docker pull wurstmeister/zookeeper docker pull wurstmeister/kafka 运行容器 运行zookeeper docker run -d --name zookeeper -p 2181:2181 wurstmeister/zookeeper 运行kafka 10.116.9.162是我本机IP,换成自己的就好了 docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=10.116.9.162:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://10.116.9.162:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/kafka 有更新! docker运行zookeeper和kfaka 程序人生
1、简介 Java有四种锁状态:无锁、偏向锁、轻量锁、重量锁,锁可以逐渐升级,但是不可以降级。 2、锁状态 在Java中对象的锁存储在对象头Mark Word中(该字段存储对象的hashcode或者锁信息) 2.1、偏向锁 2.1.1、获取 当一个线程访问同步代码块并获取锁的时候,会在对象头和栈帧中的锁记录里存储偏向锁的线程ID,以后该线程在进入和退出同步块时,不需要进行CAS加锁和解锁,会查询对象头中Mark Word是否存储着指向该线程的偏向锁,如果成功,表示线程已经获得了锁。如果失败,则需要再测试一下Mark Word中偏向锁的标识是否设置成1(表示当前是偏向锁):如果没有设置,则使用CAS竞争锁;如果设置了,则尝试使用CAS将对象头的偏向锁指向当前线程; 2.1.2、撤销 当其他线程尝试竞争偏向锁时,持有偏向锁的线程才会释放偏向锁。当另一个线程试图访问偏向锁时,会首先暂停拥有偏向锁的进程,如果线程没有运行,则将对象锁的对象头设置为无锁状态。如果线程正在运行,则会暂停该线程,恢复到无锁状态,或者标记对象不适合作为偏向锁,最后唤醒该线程。 2.1.3、优缺点 偏向锁适用于大多数时候.... 有更新! java锁状态基本概念 程序人生
volatile允许线程访问这个共享变量,一个字段被声明为volatile,则java内存模型确保所有线程看到这个变量的值是一致的。 有volatile变量修饰的共享变量进行写操作的时候会触发以下两件事: 1.将当前缓存行的数据写回到系统内存; 2.这个写回内存的操作,使其他处理器缓存的该数据的内存地址失效。 如果对声明了volatile的变量进行写操作,JVM会将这个变量所在缓存行的数据写回到系统内存,之后其他处理器通过嗅探在缓存总线上传播的数据看自己缓存的数据是否过期,当处理器发现缓存行对应的数据被修改,就会将这个数据所在的缓存行设置为无效状态,当处理器对这个缓存行重新进行操作时,会重新从系统内存读取该数据到缓存行。 有更新! 了解下volatile 程序人生
引入maven依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>examples</artifactId> <groupId>cn.com.wyl</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>struts.... 有更新! spring整合struts 程序人生
action配置多个路径 配置xml <package name="helloAction" extends="struts-default,json-default" namespace="/myHello" > <action name="helloWorld" class="helloAction"> <result name="helloPage">/WEB-INF/hello.jsp</result> <result name="sayHello" type="json"> <param name="root">user</param> </result> </action> </package> 在action中定义多个result,如上,第一个路径返回的是页面,第二个路径返回了一个json数据 action配置 action中也要配置对应的方法 import cn.com.wyl.examples.struts.entity.User; import .... 有更新! struts一个action对应多个路径和json数据支持 程序人生
1、web.xml中指定位置 此处,我只修改了struts.xml文件的位置,structs默认是从WEB-INF的classes目录下加载配置文件的,对应打包后的路径,自己根据需求修改即可 <!-- struts配置 --> <filter> <filter-name>struts</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> <init-param> <param-name>config</param-name> <param-value>struts-default.xml,struts-plugin.xml,struts/struts.xml</param-value> </init-param> </filter> <filter-map.... 有更新! struts修改配置文件位置 程序人生