javaweb
javaweb copied to clipboard
http://www1350.github.io/
catalina.sh 里面 CATALINA_OPTS后面加上,address=20051 或者 ``` JPDA_TRANSPORT=dt_socket JPDA_ADDRESS=20051 JPAD_SUSPEND=n ``` 或者 ``` JPDA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=20051’ ```  如果是springboot ``` ... ... ... org.springframework.boot spring-boot-maven-plugin 1.1.12.RELEASE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 ... ... ... ... ``` mvn...
mock代码如下 ``` public static void main(String[] args) { for(int i=0;ihash_to_index(hashValue); oop found_string = the_table()->lookup(index, name, len, hashValue); // Found if (found_string != NULL) { ensure_string_alive(found_string); return found_string; } debug_only(StableMemoryChecker smc(name,...
new Thread()不会启动一个新线程,而是调用init的这个方法设置一些东西,比如设置线程组,栈大小,拿到线程名,tid。创建一个ThreadLocalMap。 而start方法才会启动一个线程。 其实start方法的核心就是调用了 ``` private native void start0(); ``` start0 -> JVM_StartThread 虾面是openjdk 的jvm源码http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/75d40493551f/src/share/vm/prims/jvm.cpp ``` JVM_ENTRY(void, JVM_StartThread(JNIEnv* env, jobject jthread)) JVMWrapper("JVM_StartThread"); JavaThread *native_thread = NULL; // We cannot hold...
##方案一:数据库乐观锁 乐观锁通常实现基于数据版本(version)的记录机制实现的,比如有一张红包表(t_bonus),有一个字段(left_count)记录礼物的剩余个数,用户每领取一个奖品,对应的left_count减1,在并发的情况下如何要保证left_count不为负数,乐观锁的实现方式为在红包表上添加一个版本号字段(version),默认为0。 ####异常实现流程 ``` -- 可能会发生的异常情况 -- 线程1查询,当前left_count为1,则有记录 select * from t_bonus where id = 10001 and left_count > 0 -- 线程2查询,当前left_count为1,也有记录 select * from t_bonus where id = 10001...
我们知道有很多业务场景下,大量繁琐的次流程需要处理,比如更新索引等操作。但是这样一来业务主流程和次流程揉在一起显得就没那么干净。如果一些比较重的东西可能使用mq来做比较好,但是我这里就讲一下比较轻量级的做法。利用guava event来处理一些次流程。 首先我们先看下guava event的最小demo ```java final EventBus eventBus = new EventBus(); eventBus.register(new Object(){ @Subscribe public void lister(Integer integer) { System.out.printf("%s from int%n", integer); } }); eventBus.post(1); ``` 我们一个个来看,EventBus其实是运用了观察者模式,我们往他注册一个事件订阅者,只要事件被投递,投入的类型相匹配就会被订阅者处理。如果是异步的事件 ```java ExecutorService...
http://microservices.io/patterns/cn/index.html
# 多线程和并发 ## Runnable/Callable Runnable接口只有一个没有返回值的方法。 ``` trait Runnable { def run(): Unit } ``` Callable与之类似,除了它有一个返回值 ``` trait Callable[V] { def call(): V } ``` ## 线程 Scala并发是建立在Java并发模型基础上的。 在Sun JVM上,对IO密集的任务,我们可以在一台机器运行成千上万个线程。 一个线程需要一个Runnable。你必须调用线程的...
``` public class ClassA { public void method1(){ System.out.println("hello method1"); } public static void main(String[] args){ ClassB classB = new ClassB(); classB.callback("method1"); } } ``` ``` public class ClassB {...
# List ``` val numbers = List(1, 2, 3, 4) 1::2::3::4 ``` # set `Set(1,2,3)` # Seq ``` scala> Seq(1, 1, 2) res3: Seq[Int] = List(1, 1, 2) ``` #...
# 类型和多态 ## 类型 - 参数化多态性 粗略地说,就是泛型编程 - (局部)类型推断 粗略地说,就是为什么你不需要这样写代码val i: Int = 12: Int - 存在量化 粗略地说,为一些没有名称的类型进行定义 - 视窗 我们将下周学习这些;粗略地说,就是将一种类型的值“强制转换”为另一种类型 ## 变性 Variance Scala的类型系统必须同时解释类层次和多态性。类层次结构可以表达子类关系。在混合OO和多态性时,一个核心问题是:如果T’是T一个子类,Container[T’]应该被看做是Container[T]的子类吗?变性(Variance)注解允许你表达类层次结构和多态类型之间的关系: | | 含义 |Scala 标记|...