陈晓锋的学习笔记

记录一些日常接触到的专业知识


  • Home

  • Categories

  • Archives

Java线程状态

Posted on 2018-09-10 | In Java , 线程 | Comments: | Views:

线程状态图

Java线程状态图

新建

新建(new):新创建一个线程对象

可运行

可运行(runnable): 线程对象创建后,其他对象调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权。

运行

可运行状态(runnable)的线程获得了CPU时间片(timeslice),执行程序代码。

阻塞

阻塞状态(blocked)是指线程因为某种原因放弃了CPU使用权。情况分为三种:

  • 等待阻塞:运行线程执行o.wait()方法,JVM会把该线程放入等待队列(waiting queue)中。
  • 同步阻塞:运行线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池(lock pool)中。
  • 其他阻塞:运行线程执行Thread.sleep(long ms)或t.join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、I/O处理完毕时,线程重新转入可运行(runnable)状态

死亡

线程run()、main()方法执行结束,或者因异常退出了run()方法,则该线程结束生命周期(terminated)。死亡线程不可再次复生。

Java Queue分析

Posted on 2018-09-05 | In 数据结构 , Queue | Comments: | Views:

Java中Queue的使用

Queue接口与List、Set同一级别,都是继承了Collection接口。

LinkedList实现了Queue接口。Queue接口窄化了对LinkedList的方法的访问权限。

BlockingQueue继承了Queue接口。

在多线程进行合作时,阻塞队列是很有用的工具。

工作者线程可以定期地把中间结果存到阻塞队列中,而其他工作者线程可以把中间结果取出来并在将来修改它们。队列会自动平衡负载。

Read more »

FactoryBean的作用

Posted on 2018-09-03 | Edited on 2018-09-05 | In Spring框架 | Comments: | Views:

Spring中有两种类型的Bean,一种是普通Bean,另一种是工厂Bean即FactoryBean。FactoryBean和普通Bean不同,其返回的对象不是指定类的一个实例,而是该FactoryBean的getObject方法所返回的对象。创建出来的对象是否属于单例由isSingleton中的返回决定。

Read more »

MyBatis中SqlSessionFactory和SqlSession

Posted on 2018-09-03 | In 数据库 | Comments: | Views:

MyBatis的持久化解决方案是将用户从原始的JDBC访问中解放出来。

MyBatis帮助用户实现底层数据库连接的获取,数据访问的实现,事务控制等。

MyBatis中的常见对象有SqlSessionFactory和SqlSession。

Read more »

JUnit的Log4j2配置

Posted on 2018-09-02 | In 工具 | Comments: | Views:

原文

给JUnit测试提供不同Log4j2配置是很普遍的需求,通常有以下两种做法:

测试目录下放置log4j2-test.xml

Log4j2-Config-for-JUnit

放置log4j2-test.xml文件到src/test/resources目录下,这样可以替换log4j2.xml配置

设置log4j.configurationFile配置

在@BeforeClass中配置log4j.configurationFile可以指定加载的log4j配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.net.MalformedURLException;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.BeforeClass;
import org.junit.Test;

public class HelloWorldTest
{
private static Logger LOGGER = null;

@BeforeClass
public static void setLogger() throws MalformedURLException
{
System.setProperty("log4j.configurationFile","log4j2-testConfig.xml");
LOGGER = LogManager.getLogger();
}

@Test
public void testOne()
{
LOGGER.debug("Debug Message Logged !!!");
LOGGER.info("Info Message Logged !!!");
LOGGER.error("Error Message Logged !!!", new NullPointerException("NullError"));
}
}

《调试九法》总体规则

Posted on 2018-09-02 | In 读书笔记 , 调试九法 | Comments: | Views:

调试规则

规则1 理解系统

规则2 制造失败

规则3 不要想,而要看

规则4 分而治之

规则5 一次只改一个地方

规则6 保持审计跟踪

规则7 检查插头

规则8 获得全新观点

规则9 如果你不修复bug,它将依然存在

《调试九法》第5章 不要想,而要看

Posted on 2018-09-02 | In 读书笔记 , 调试九法 | Comments: | Views:

在软件世界里,观察意味着设置断点、添加测试语句、监视程序值以及检查内存。

Read more »

git中的upstream

Posted on 2018-08-30 | Comments: | Views:

upstream意为上游,即本地分支所对应的远程分支。

一般,本地分支如果是从clone或者fetch得到的,都在远程库有一个upstream分支。

Read more »

git reset

Posted on 2018-08-29 | In 工具 | Comments: | Views:

git reset mixed/soft/hard的区别

git reset至少会更改当前分支(HEAD)的指向。--mixed和--soft的区别在于是否改变了索引(index)。

Read more »

Spring @Conditional注解

Posted on 2018-08-28 | Edited on 2018-08-29 | In Spring框架 | Comments: | Views:

一个组件带上@Conditional注解或者实现了Condition接口都标识着该组件只在特定条件满足的情况下,才会注册(eligible for registration)。

Read more »
123

陈晓锋

没有什么干货啦

23 posts
13 categories
20 tags
© 2018 陈晓锋
Powered by Hexo v3.7.1
|
Theme – NexT.Mist v6.4.0