Java多线程的知识概要

1.程序 进程 线程
(1)程序:指令集  静态概念
(2)进程:操作系统  调度程序 动态概念
(3)线程:在进程内的多条执行路径

2.(1)进程是程序的一次动态执行过程,占用特定的地址空间
(2)每个进程是独立的,由3部分组成cpu,data,code
缺点:内存的浪费,cpu的负担

3.(1)线程又称为轻量级进程
(2)一个进程可拥有多个并发的线程
(3)一个进程中的线程共享相同的内存单元/内存地址空间->可以访问相同的变量和对象,而且它们从同一堆中分配对象
->通信、数据交换、同步操作
(4)由于线程的通信是在同一地址空间上进行的,所以不需要额外的通信机制,这就使得通信更简便而信息传递的速度也
更快。
 

4.线程与进程的区别

blog.csdn.net/dazhong159/article/details/7896070

5.线程的创建
www.cnblogs.com/whgw/archive/2011/10/03/2198506.html
ifeve.com/creating-and-starting-java-threads/
(1)继承Thread类+重写run()
启动:创建子类对象+对象.start()

(2)实现Runnable+重写run()
启动:使用静态代理
           创建真实角色
           创建代理角色  Thread+引用
           代理角色.start()

(3)使用Callable与Future创建
可以返回值,并且可以抛出异常,创建麻烦
线程三种创建方式比较
blog.csdn.net/longshengguoji/article/details/41126119

6.java中thread的start()和run()的区别
www.cnblogs.com/cici-new/p/3581707.html
start()用来启动一个线程,此时线程处于就绪状态,run()只是当做普通方法调用,所以启动线程需要调用start()

7.java的静态代理和动态代理
www.cnblogs.com/mengdd/archive/2013/01/30/2883468.html
www.cnblogs.com/mengdd/archive/2013/01/30/2883495.html

代理模式
  代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。
  在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式一般涉及到的角色
  抽象角色:声明真实对象和代理对象的共同接口。
  代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能够代替真实对象。
  同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。
  真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。
在静态代理中,一个真实角色必须对应一个代理角色,但如果大量使用会导致类的急剧膨胀,就需要用动态代理解决
动态代理中的代理角色是动态的

8.java线程详解
www.cnblogs.com/riskyer/p/3263032.html

9.Java多线程之join
(1)join方法只有在继承了Thread类的线程中才有。
(2)线程必须要start() 后再join才能起作用。
将另外一个线程join到当前线程,则需要等到join进来的线程执行完才会继续执行当前线程。

10.阻塞线程sleep,yield

11. 优先级PROIRITY表示的是概率,不是绝对的优先级,不是执行顺序。

12.在编写一个类时,如果该类中的代码可能运行于多线程环境下,那么就要考虑同步的问题。在Java中内置了语言级的同步原语--synchronized,这也大大简化了Java中多线程同步的使用。
www.cnblogs.com/devinzhang/archive/2011/12/14/2287675.html

13.同步加锁的是对象,而不是代码。
www.cnblogs.com/mengdd/archive/2013/02/16/2913806.html

14.synchronized关键字是不能继承的,也就是说,基类的方法synchronized f(){} 在继承类中并不自动是synchronized f(){},而是变成了f(){}。继承类需要你显式的指定它的某个方法为synchronized方法;

15.Java中的每个对象都有一个锁(lock),或者叫做监视器(monitor),当一个线程访问某个对象的synchronized方法时,将该对象上锁,其他任何线程都无法再去访问该对象的synchronized方法了(这里是指所有的同步方法,而不仅仅是同一个方法),直到之前的那个线程执行方法完毕后(或者是抛出了异常),才将该对象的锁释放掉,其他线程才有可能再去访问该对象的synchronized方法。

16.非静态的同步方法会将对象上锁,但是静态方法不属于对象,而是属于类,它会将这个方法所在的类的Class对象上锁。

17.过多的同步,会造成死锁,使用生产者与消费者模式解决
思路-----
生产者生产,消费者等待,生产完后通知消费者 并且释放资源 sign = true(标志可随意定)
消费者消费,生产者等待,消费后通知生产者  并且释放资源  sign = flase

明白多线程思想:就是多个线程不断的抢夺资源,释放资源,根据分配的时间片快速交换
wait() 释放资源后 notify()唤醒线程 改变标志

18.生产者、消费者实现步骤
(1)将调用方法同步synchronized
(2)加上wait()执行条件 如:
if(!sign){
     try {
           this.wait();
     } catch (InterruptedException e) {
            e.printStackTrace();
     }
 }
(3)唤醒其它线程
this.notify();
(4)更改信息标志:   如 sign = true (让当前线程wait())

19.定时器类
Timer 一种工具,安排在指定的时间执行指定的任务。可安排任务执行一次,或者定期重复执行。
TimerTask实现Runnable,定时器任务
Timer 类中schedule方法指定执行的任务
quarz任务调度框架 
20.同步:为了保证公有资源的准确和安全

21.Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作。此实现允许更灵活的结构,可以具有差别很大的属性,可以支持多个相关的 Condition 对象。

锁是控制多个线程对共享资源进行访问的工具。通常,锁提供了对共享资源的独占访问。一次只能有一个线程获得锁,对共享资源的所有访问都需要首先获得锁。不过,某些锁可能允许对共享资源并发访问,如 ReadWriteLock 的读取锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值