java学习

java学习

 

git ssl tls 报错需要执行的命令

 git config --global http.sslVerify false

posted @ 2018-07-04 15:27 杨军威 阅读(456) | 评论 (0)编辑 收藏

java值传递的例子

public class Test {
//不能正确调换值
public static void swap(Integer a,Integer b){
Integer t=a;
a=b;
b=t;
System.out.println("a="+a);
System.out.println("b="+b);
}
public static void main(String[] args) {
Integer a=1;
Integer b=2;
System.out.println("a="+a);
System.out.println("b="+b);
System.out.println("----------");
swap(a, b);
System.out.println("----------");
System.out.println("a="+a);
System.out.println("b="+b);
}
}
在内存中,真实的值放在heap中,变量a,b放在栈中,a,b保存的是值在heap中的地址,当调用swap方法时,形参也是保存在栈中,是新的变量,指向heap中真的值,并没有修改原先a,b的指向,所以无法交换值。

posted @ 2018-06-08 14:24 杨军威 阅读(164) | 评论 (0)编辑 收藏

spring中Condition接口的用法

matches方法返回true,装配bean,返回false,不装配bean,在需要可能装配的bean的方法和类上加上注解@Conditional(XXXCondition.class)

posted @ 2018-05-21 15:42 杨军威 阅读(575) | 评论 (0)编辑 收藏

spring中BeanPostProcessor接口的使用

@Component
public class AllBeanPostProcessor implements BeanPostProcessor{
//对象属性设置方法完成后,init方法执行前执行
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("BeforeInit="+beanName);
return bean;
}
//init方法执行后执行
public  Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("AfterInit="+beanName);
return bean;
}
}

posted @ 2018-05-21 10:04 杨军威 阅读(111) | 评论 (0)编辑 收藏

spring中BeanDefinitionRegistryPostProcessor接口的使用

@Component
public class MyBeanFactoryPostProcessor2 implements BeanDefinitionRegistryPostProcessor{
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
// TODO Auto-generated method stub
}
//可以动态把对象注入spring对象
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
for (int i = 0; i < 10; i++) {
BeanDefinitionBuilder b=BeanDefinitionBuilder.rootBeanDefinition(User.class);
b.addPropertyValue("name", "admin"+i);
registry.registerBeanDefinition("user"+i, b.getBeanDefinition());
}
}
}

posted @ 2018-05-21 10:03 杨军威 阅读(2869) | 评论 (0)编辑 收藏

volatile

关键字
package test;
public class TestThread extends Thread{
private volatile boolean stop=false;
@Override
public void run() {
int i=0;
while(!stop){
i++;
}
System.out.println("完成="+i);
}
public void setStop(){
stop=true;
}
public boolean  getStop(){
return stop;
}
}
volatile关键字只能保证多个线程间的可见性,但是不具备同步性,可以算得上是轻量级的
synchronized,性能要比synchronized高,不会造成阻塞。一般volatile用于多个线程之间的可见的变量操作,并不能代替synchronized的同步功能。

posted @ 2018-05-03 09:56 杨军威 阅读(114) | 评论 (0)编辑 收藏

oracle一致性读

例如:9点的时候,客户A发起select语句,大概需要执行10分钟,返回结果100,在9点5分的时候,客户B发起一条update语句,把100更新为200.当10分钟后,客户A得到的结果还是100或者返回异常snapshot too old。因为oracle数据库有数据一致性的保证,客户9点查询时,数据库会把数据复制到undo的副本,给客户返回的就是这个副本,如果同时多个客户端进行update操作,可能导致副本找不到,但是无论如何,不会返回修改过的数值。

posted @ 2018-05-02 17:08 杨军威 阅读(139) | 评论 (0)编辑 收藏

java同步锁的使用3

在一个对象中的多个方法上都加上synchronized,代表同时执行这些方法时,是同步的,同步锁是属于对象的不是单个方法的。
package test;
public class Test6 {
public  synchronized void get1(String s){
System.out.println(s);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public  synchronized void get2(String s){
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(s);
}
public static void main(String[] args) {
final Test6 t =new Test6();
new Thread(new Runnable() {
@Override
public void run() {
t.get1("a");
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
t.get2("b");
}
}).start();
}
}

posted @ 2018-05-02 16:35 杨军威 阅读(133) | 评论 (0)编辑 收藏

java同步锁的使用2

多个线程访问同多个对象,同步方法加static,表示此方法属于类,所有此对象的此方法执行需要同步
package test;
public class Test5 {
public static synchronized void get(String s){
if("a".equals(s)){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(s);
}
public static void main(String[] args) {
final Test5 t =new Test5();
final Test5 t1 =new Test5();
new Thread(new Runnable() {
@Override
public void run() {
t.get("a");
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
t1.get("b");
}
}).start();
}
}

posted @ 2018-05-02 16:15 杨军威 阅读(112) | 评论 (0)编辑 收藏

java同步锁的使用

多个线程使用一把锁,多个线程访问同一个对象的方法或者属性。
package test;
public class Test4 {
public synchronized void get(String s){
if("c".equals(s)){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(s);
}
public static void main(String[] args) {
final Test4 t =new Test4();
new Thread(new Runnable() {
@Override
public void run() {
t.get("a");
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
t.get("b");
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
t.get("c");
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
t.get("d");
}
}).start();
}
}

posted @ 2018-05-02 16:13 杨军威 阅读(174) | 评论 (0)编辑 收藏

仅列出标题
共43页: 上一页 1 2 3 4 5 6 7 8 9 下一页 Last 

导航

统计

常用链接

留言簿

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜