
Java 多线程编程核心技术
文章平均质量分 52
不两立
这个作者很懒,什么都没留下…
展开
-
01.使用多线程
1,使用多线程有两种方式,一种是继承Thread类,一种是实现Runnable接口,(还有一种是线程池,在此不涉及)2,在源码中:public class Thread implements Runnable可以看出,Thread实现类已经实现了Runnable接口,他们具有多态关系。3,java本身是单继承的,所以在继承Thread类是,具有局限性,所以可以实现Runnable接口。原创 2017-11-15 17:00:39 · 147 阅读 · 0 评论 -
10_锁重入,异常,继承,同步代码块,死锁
暂时略读,日后详细解释1:synchronized锁重入关键字synchronized拥有锁重入的功能,也就是在使用synchronized时,当一个线程得到一个对象锁之后,再次请求此对象锁时是可以直接得到该对象的锁的。“锁重入”的概念是:自己可以再次获取自己的内部锁,如果不可重入的话,就会造成死锁。当存在父子类的继承的时候,子类完全可以通过“可重入锁”调用父类的同步方法。原创 2017-12-19 11:02:19 · 260 阅读 · 0 评论 -
07_线程停止(interrupt,interrupted,isInterrupted)
一. 线程启动线程启动 : – 1. 继承 Thread 运行线程 : 重写 Thread 类的 run 方法, 然后执行该线程;– 2. 实现 Runnable 接口, 并运行线程;– 代码示例 : [java] view plain copy print?package com.hanshuliang.thread; public class ThreadStart { pu转载 2017-11-28 10:05:16 · 235 阅读 · 0 评论 -
09_脏读
脏读:再赋值时进行了同步,但是在读取值的时候有一些意想不到的意外,这种情况就是脏读。发生脏读的情况时发生在读取实例变量时,此值已经被其他线程更改过了。示例:(代码中注释有代码执行过程)DirtyRead.javapackage dirtyRead;public class DirtyRead { public String username="A"; public原创 2017-12-15 14:29:41 · 228 阅读 · 0 评论 -
08_证明:synchronized是对象锁
过程:1.写一个类MyObjcet,里面有两个方法,methodA和methodB。2.synchronized声明methodA类是同步的,B类不声明。3.写两个线程类 ThreadA和TheadB,分别调用methodA和methodB4.写主函数,运行代码,注意:两个线程要访问同一个对象,否则相当于异步执行。5.检查结果,然后把B类也声明,再次运行,检查结果。原创 2017-12-12 15:40:38 · 218 阅读 · 0 评论 -
05_留意i--与System.out.println()在多线程中的异常
先上例子,赋值i=5,然后i--,用5个线程跑MyThread.javapackage sys_out_print_i;public class MyThread extends Thread{ private int i = 5; @Override public void run(){ System.out.println("i="+(i--)+" thread原创 2017-11-16 19:19:51 · 1046 阅读 · 1 评论 -
04_非线程安全小述(synchronized原理)
1.非线程安全:主要是指多个线程对同一个对象中的同一个实例变量进行操作时会出现值被更改,值不同步的情况,进而影响程序的执行流程。2.通过在run方法前加入synchronized关键字,使多个线程在执行run方法时,以排队的方式进行处理。当一个线程调用run方法前,先判断run方法有没有被上锁,如果上锁,则说明有其他线程正在调用run方法,必须等待其他线程调用结束后才可以执行run方法原创 2017-11-16 18:51:03 · 241 阅读 · 0 评论 -
03_三个窗口卖100个车票
1.Thead方法实现package SellTicket.thread;public class SellTicketThread extends Thread { /* * 1。这里要设置成static,否则就是每个窗口都有100张 * */ private static int ticketNumber = 100; @Override public void run(原创 2017-11-15 18:41:46 · 558 阅读 · 0 评论 -
06_多线程中的This和Thread.currentThread()的区别
在自定义线程类时,如果线程类是继承java.lang.Thread的话,那么线程类就可以使用this关键字去调用继承自父类Thread的方法,this就是当前的对象。另一方面,Thread.currentThread()可以获取当前线程的引用,一般都是在没有线程对象又需要获得线程信息时通过Thread.currentThread()获取当前代码段所在线程的引用。主要看主函数中,看了转载 2017-11-21 18:17:55 · 215 阅读 · 0 评论 -
02_运行多线程
1.继承Thread类(1)子类例如:MyThread继承Thread,重写run方法(2)在主函数中创建MyThread的实例myThread: MyThread myThread = newMyThread();(3)调用start()方法myThread.start();2.实现Runnable接口(1)子类例如:MyRunnable实现Runnable接口,重写r原创 2017-11-15 18:22:36 · 169 阅读 · 0 评论 -
11_等待/通知(wait/notify)机制介绍
1.当两个线程主动地读取一个共享变量时,在花费读取时间的基础上,读取到的值是不是想要的,并不能完全确定,“等待/通知”机制就用来满足这样的需求。2.wait()的作用是使当前执行的线程进行等待。调用之前要获取对象级别锁,即只能在同步方法中或者同步块中调用。执行wait()方法后,当前线程释放锁,在从wait()返回前,线程与其他线程竞争重新获得锁。3.notify()也要在原创 2017-12-19 14:06:53 · 361 阅读 · 0 评论