随笔分类 - java_基础
摘要:什么是反射? 反射机制是在程序运行状态中,对于任意一个类,都能够获取这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取信息以及动态调用对象的方法的功能称为java语言的反射机制。 反射的作用 1.可以实现简单的反编译,获取类中的属性和方法等基本信息,.class
阅读全文
摘要:线程的生命周期 线程的生命周期主要分为下面5个状态: 新建 就绪 运行 阻塞 死亡 线程生命周期过程图: 以上面图为例,简单说一下线程的生命周期1.新建线程,创建一个线程的对象。2.线程对象创建好之后进入就绪状态,此时会等待获取CPU的执行权。3.获取到CPU执行权之后,线程对象开始运行。4.在线程
阅读全文
摘要:互斥锁 在Object类中的notify方法只能是随机的唤醒单个线程,不能唤醒指定线程,为了弥补这个缺陷,在jdk5.0的版本中新增了ReenTrantLock类和Condition接口来替换synchronized关键字和wait、notify方法。 ReenTrantLock类和Conditio
阅读全文
摘要:两个线程之间的通信 多线程环境下CPU会随机的在线程之间进行切换,如果想让两个线程有规律的去执行,那就需要两个线程之间进行通信,在Object类中的两个方法wait和notify可以实现通信。 wait方法可以使当前线程进入到等待状态,在没有被唤醒的情况下,线程会一直保持等待状态。notify方法可
阅读全文
摘要:定时任务 定时任务就是让计算机自动的每隔一段时间执行的代码。比如要实现这样的一个功能:让计算机每隔5秒钟,在控制台打印一个www.monkey1024.com可以使用java.util包下的Timer类和TimerTask类来实现。 TimerTask是一个实现了Runnable接口的抽象类,需要编
阅读全文
摘要:单例模式 单例模式:程序运行时,让某个类在内存中只有一个对象,即让一个类只能创建一个对象。一般分为懒汉式和饿汉式 饿汉式 有三步: 构造方法私有化 创建当前类对象 对外提供公共的访问方法将SingletonHungary对象暴露给外部 构造方法私有化 创建当前类对象 对外提供公共的访问方法将Sing
阅读全文
摘要:volatile作用 volatile的作用是可以保持共享变量的可见性,即一个线程修改一个共享变量后,另一个线程能够读取到这个修改后的值。 先来看一个问题: 定义一个Task类 使用多线程执行上面的类 上面程序中在64位的机器上以server模式运行时,有可能会出现死循环的现象。 JVM的运行可以分
阅读全文
摘要:死锁问题 在编写多线程代码时一定要注意避免死锁,发生死锁原因就是两个或多个线程都在等待对方释放锁导致,下面通过代码来演示一下死锁情况。 上面使用了同步代码嵌套来演示了死锁,实际开发中不仅是这种嵌套才会发生死锁,所以一定要注意避免。
阅读全文
摘要:synchronized同步方法的问题 有些情况下,在方法上面加synchronized同步,会有性能问题。请看下面代码,来计算下两个线程执行的耗时: 使用同步代码块完善上面代码 上面代码打印结果是6秒,里面使用Thread.sleep方法来模拟了一个执行耗时较长的代码,假设这段代码并不会涉及到安全
阅读全文
摘要:线程安全问题 先看下面代码出现的问题: 定义一个Task类,里面有一个成员变量和一个有boolean类型参数的方法,方法内部会根据传入参数修改成员变量的值。 创建一个Task对象,将这个对象放到两个线程中,在这两个线程中分别调用changeNum方法 上面的代码有可能会出现打印这样的结果: 正常情况
阅读全文
摘要:唤醒正在睡眠的线程 可以使用Thread类中的interrupt方法唤醒正在睡眠的线程,调用interrupt方法会抛出一个InterruptedException的异常。
阅读全文
摘要:设置线程优先级 可以通过使用Thread类中的setPriority方法设置线程的优先级。setPriority()方法接收一个int类型的参数,通过这个参数可以指定线程的优先级,取值范围是整数1~10,优先级随着数字的增大而增强。在Thread类中封装了三个int类型的数字:优先级最低:publi
阅读全文
摘要:线程睡眠 Thread中的sleep方法可以使当前线程睡眠,线程睡眠后,里面的任务不会执行,待睡眠时间过后会自动苏醒,从而继续执行任务。 Thread中有两个重载的sleep方法sleep(long millis),指定睡眠毫秒数sleep(long millis, int nanos),第一个参数
阅读全文
摘要:练习:使用多线程程序模拟电影票售卖的过程,一共有100张电影票,3个公司对外售卖 代码实现:先创建一个Ticket类实现Runnable接口 创建线程:
阅读全文
摘要:获取线程对象 在使用Runnable接口来创建线程的时候,run方法中无法使用Thread类中的getName()方法,这时可以使用Thread.currentThread()方法获取Thread的对象,通过对象调用getName()方法。
阅读全文
摘要:多线程创建的三种方式对比 继承Thread 优点:可以直接使用Thread类中的方法,代码简单 缺点:继承Thread类之后就不能继承其他的类 优点:可以直接使用Thread类中的方法,代码简单 缺点:继承Thread类之后就不能继承其他的类 实现Runnable接口 优点:即时自定义类已经有父类了
阅读全文
摘要:实现Callable接口创建线程 Callable接口是在jdk5版本中加入的,这个接口在java.util.concurrent包下面,与其他两种方式不同的地方在于使用Callable接口创建的线程会获得一个返回值并且可以声明异常。 使用Callable创建线程步骤: 线程池 线程池是初始化一个多
阅读全文
摘要:实现Runnable接口创建线程 使用Runnable创建线程步骤:
阅读全文
摘要:继承Thread类创建线程 在java里面,开发者可以创建线程,这样在程序执行过程中,如果CPU空闲了,就会执行线程中的内容。 使用Thread创建线程的步骤:
阅读全文
摘要:进程和线程 什么是进程?可以简单的认为一个应用程序就是一个进程,不过有些应用程序会启动多个进程,即一个应用程序至少会启动一个进程,在windos系统上面通过任务管理器可以查看计算机上正在启动的进程。 进程和进程之间的内存是独立的,这样可以提高应用程序的稳定性和安全性。 什么是线程? 线程是进程中的一
阅读全文