线程各种 已看1 和之前重复的比较多 没用

1.进程是一个独立的运行环境, 进程可以是一个程序或者一个应用,线程是进程的一个执行的任务

2.多线程编程的好处,

多线程并发访问提高访问效率,并且多线程访问不用因为线程等待资源而空闲线程.  多线程可以充分利用多核CPU 

4.可以继承Thread类并重写run()方法, 实现runnable接口,它直接传递给Tread构造函数 并创建thread对象.

5.创建线程,new 创建一个线程后,该线程没有被系统分配资源,这时线程处于创建状态

就绪状态,  线程调用start方法使系统为该线程分配资源,使线程进入就绪状态.

运行状态. Java运行系统通过调度选中一个处于就绪状态的线程,使其占有CPU并转为运行状态。此时,系统真正执行线程的run()方法。

阻塞和唤醒状态  线程调用sleep方法使线程进入睡眠指定时间,

线程调用wait方法使线程挂起, 当线程调用notify使线程执行运行状态.

死亡当线程调用 stop 或者interspter使线程进入死亡状态

6.线程直接调用run方法就像当于线程调用一个普通方法.

7.调用sleep方法或者wait,notify,notifyAll

Sleep使线程睡眠一段时间,是由线程本身控制, 例如.我要点火,烧水,煮饭.   我点完火,我想睡一觉之后再烧水然后煮饭. 控制权是由我自己控制.

Wait方法是其他对象对线程的控制. 其他对象相当于传话的功能. 例如我是厨师,我要点火,烧水,煮饭. 我点完火之后老板打电话告诉我停止.  

Sleepwait实际区别在于sleep是对线程的控制. Wait方法是线程之间的通讯问题

thisOBJ.notify()的时候,那么我就可以煮饭了,这个被暂停的线程就会从暂停处 继续执行. 

1Sleep是继承thread. Wait输入Object

2wait方法只能在同步块或者方法中执行 sleep可以在任何方法中执行.

2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。

Sleep抛异常,  wait方法不需要抛异常.

8.线程分1-10个优先级  10优先级最高 1最低

12.线程之间的通讯是通过waitnotify方法 在同步块或者同步方法中运行

18.同步块更好. 因为他不会锁住整个对象.

  1. 线程不需要同步时, 可以调用threadLocal方法.

23.-----两个以上的线程永远处于阻塞状态,成为死锁. 避免死锁,

1.原子操作是事务的一个特性,是一个不可分割的执行单元.

2.线程调度:协同式 线程执行时间由线程本身控制, 线程把自己的工作执行完成后,自己切换到另一个线程上.

抢占式:  线程执行时间由系统控制.

4字符流和字节流的区别.

字节流单位是字节.  字符流的单位是Unicode码元  一个字符占俩字节

字符流一般只传输文本数据. 字节流可以传输任何数据.

------  字节流不适用缓冲区  字符流适用缓冲区

字节流 继承outputstream  字符流继承 inputstreamreader  

-----序列化serializa  

7大量的从硬盘读取 需要适用字符流 因为字符流存在缓冲区 减少对硬盘的损伤

8.字节流 因为字节流可以将不同类型的数据转换成字节. 然后打印到数据源

outputsteamwtrite

19.流一般不需要关闭如果需要关闭 需要在fannally中关闭.

25.serlizible接口 字节流

  1. 当需要读写的时候  使用序列化. serlizible标记的对象可以实现读写功能

3反射  哪里用到反射

Class.forname(driver).newinstance() 现在很多框架都用到反射  hibernateStruts

Java序列化

我们有时候将一个java对象变成字节流的形式传出去或者从一个字节流中恢复成一个java对象,例如,要将java对象存储到硬盘或者传送给网络上的其他计算机,这个过程我们可以自己写代码去把一个java对象变成某个格式的字节流再传输,但是,jre本身就提供了这种支持,我们可以调用OutputStreamwriteObject方法来做,如果要让java 帮我们做,要被传输的对象必须实现serializable接口,这样,javac编译时就会进行特殊处理,编译的类才可以被writeObject方法操作,这就是所谓的序列化。需要被序列化的类必须实现Serializable接口,该接口是一个mini接口,其中没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的。

死锁和避免死锁

死锁是指两个以上的线程永远阻塞的情况,这种情况产生至少需要两个以上的线程和两个以上的资源。

避免嵌套锁,只在需要的地方使用锁和避免无限期等待是避免死锁的通常办法,

什么是TreadLocal

ThreadLocal用于创建线程的本地变量,我们知道一个对象的所有线程会共享它的全局变量,所以这些变量不是线程安全的,我们可以使用同步技术。但是当我们不想使用同步的时候,我们可以选择ThreadLocal变量。

原文地址:https://www.cnblogs.com/shan1393/p/9251940.html