java基础
sinat_38142087
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
深入源码理解线程两种实现方式的run()方法
线程的实现有两种方法,第一种是继承Thread类,重写run()方法,并调用start()方法;第二种是实现Runnable接口,并实现接口中run()方法,然后调用start方法。那么从源码上来看,这两种方法有什么不同呢? 首先,分析下Thread类中的run()方法到底做了什么事情? @Override public void run() { ...原创 2018-11-21 00:01:51 · 1112 阅读 · 0 评论 -
线程的生命周期
线程生命周期转换图: 1、New 创建状态当时用new操作符创建一个线程对象时,该线程属于创建状态。处于创建状态的线程只是一个空的线程对象,系统不会为它分配资源。只有在调用start()方法后才会给线程分配资源2、Runnable 可运行状态执行线程的start()方法将为线程分配必须的系统资源,安排它运行,并调用线程体run()方法,这样线程就处于可运行状态。可运行状态...原创 2018-11-21 15:37:14 · 191 阅读 · 0 评论 -
成员变量和局部变量在多线程中使用的区别
public class ThreadTest implements Runnable { public static void main(String[] args) { //只创建了一个对象 Runnable r = new ThreadTest(); //该对象创建了两个线程 Thread t1 = new Thread(r); Thread t2 = new Th...原创 2018-11-21 17:38:59 · 1662 阅读 · 0 评论 -
多线程同步问题探索
先写一个小案例,说明在什么情况下会出现线程同步的问题:银行取钱案例package com.bean;public class ThreadTest{ public static void main(String[] args) { Bank bank = new Bank(); //我们分别创建两个对象,分别去取一个账户中的钱 Thread t1 = new ...原创 2018-11-21 19:04:54 · 198 阅读 · 0 评论 -
多线程之间的通信(二)使用阻塞队列
BlockingQUery接口是Query的子接口,是作为线程同步的工具。BlockingQuery具有一个特征,当生产者线程试图向BlockingQuery中放入元素时,如果队列已满,则该线程被阻塞;当消费者从BlockingQuery中去除元素时,如果队列已空,则该线程阻塞。程序的两个线程通过交替向BlockingQuery存入元素,取出元素,可很好的控制线程的通信。Blockin...原创 2018-11-23 17:45:44 · 780 阅读 · 0 评论 -
同步方法和同步代码块的使用和区别
同步方法的使用:在方法上加synchronizedpublic synchronized void execute(){ for(int i = 0; i < 20; i++) { try { Thread.sleep((long)(Math.random() * 1000)); } catch (InterruptedEx...原创 2018-11-22 16:19:39 · 6912 阅读 · 0 评论 -
深入理解数组
当创建一个数组的时候,要将数组拆分成两部分来看待,一部分是数组的引用,放置在栈内存中,一部分是数组的对象,放置在堆内存中。 数组的引用可以指向任何有效的内存,只有当数组引用指向有效的内存时,才可以通过数组变量来访问数组元素。数组变量是访问数组对象的根本方式。实际的数组对象是放置在堆内存中的,如果引用该数组对象的数组引用变量是一个局部变量,那么它被存储在栈内存中。如果引用变量p想...原创 2018-11-20 11:31:45 · 276 阅读 · 0 评论 -
多线程之间的通信-wait方法和notify方法解析
死锁(deadLock):有两个线程,A线程获取到a资源,B线程获取到b资源,每个线程都必须获取到a,b两个资源才可以继续往下执行,但在此种情况下,A线程和B线程都不愿意放开自己手中的资源,此为死锁。 wait方法wait是object类中的方法,而且被fianl修饰。wait方法可以被所有的类所继承并且不能被重写。wait方法会造成当前线程等待,直到有其他的线程调用同一对象的...原创 2018-11-23 11:47:59 · 356 阅读 · 0 评论
分享