疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

java中的线程有jvm线程调度器负责调度


 

    多线程

  多进程

  每个进程间拥有独立的内存空间

  0~4G

  单核

  系统将cpu所有时间分割为相同的时间片

  有内核负责调度

  线程属于进程内部

  进程内部的所有线程共享进程的内存

  让一个进程拥有同时执行多段代码的能力

  java中的线程有jvm线程调度器负责调度

  线程控制

  start() 启动线程

  interrupt() 中断线程,唤醒正在休眠线程

  检测当前线程是否被中断

  isInterrupted() 只检查中断标志

  interrupted() 检查并清除中断标志

  Thread.sleep() 线程休眠,清除当前中断标志

  Thread.currentThread() 获取当前线程对象

  getPriority() 获取线程优先级

  setPriority() 修改线程优先级,linux没有实现

  容易造成死锁

  stop() 停止

  suspend() 挂起

  destory()

  resume()

  锁

  线程交互

  线程等待

  进程是程序运行的最小单位。

  线程是CPU调度的最小单位。

  Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。

  一般Singleton模式通常有几种种形式:

  第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。

  public class Singleton {

  private Singleton(){}

  //在自己内部定义自己一个实例,是不是很奇怪?

  //注意这是private 只供内部调用

  private static Singleton instance = new Singleton();

  //这里提供了一个供外部访问本class的静态方法,可以直接访问

  public static Singleton getInstance() {

  return instance;

  }

  }

  第二种形式:

  public class Singleton {

  private static Singleton instance = null;

  public static synchronized Singleton getInstance() {

  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次

  //使用时生成实例,提高了效率!

  if (instance==null)

  instance=new Singleton();

  return instance;   }

  }

  其他形式:

  定义一个类,它的构造函数为private的,所有方法为static的。

  一般认为第一种形式要更加安全些

  线程同步的方法。

  wait():使一个线程处于等待状态,并且释放所持有的对象的lock。

  sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。

  notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。

  Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

  线程的基本概念、线程的基本状态以及状态之间的关系

  线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身。

  Java中的线程有四种状态分别是:运行、就绪、挂起、结束。

  synchronized和java.util.concurrent.locks.Lock的异同 ?

  主要相同点:Lock能完成synchronized所实现的所有功能

  主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。

  Java中的23种设计模式:

  Factory(工厂模式), Builder(建造模式), Factory Method(工厂方法模式),

  Prototype(原始模型模式),Singleton(单例模式), Facade(门面模式),

  Adapter(适配器模式), Bridge(桥梁模式), Composite(合成模式),

  Decorator(装饰模式), Flyweight(享元模式), Proxy(代理模式),

  Command(命令模式), Interpreter(解释器模式), Visitor(访问者模式),

  Iterator(迭代子模式), Mediator(调停者模式), Memento(备忘录模式),

  Observer(观察者模式), State(状态模式), Strategy(策略模式),

  Template Method(模板方法模式), Chain Of Responsibleity(责任链模式)

  IO流

  1.what?

  流的概念来自Unix的管道,在Unix中,管道是一条不间断的字节流,

  用来实现进程间通讯,或者读写外围设备,文件等.

  2.一个流,一定会有一个源端和目标端,它们分别可以是计算机内存的某个区域,也可以是磁盘文件,或者是网络上的某个URL

  3.流的方向,根据流的方向,流可以分为两类,流的方向是固定并且是不可逆的

  1)输入流 只能读,不能写

  2)输出流 只能写,不能读

  4.java api

  可以读入一个字节的流, 称为输入流

  可以写入一个字节的流,称为输出流

  5.流的分类,

  节点流(低级流):从特定地方读写的流

  过滤流(高级流):使用节点流作为输入输出

  6.

  字节流:操作的内容为字节 InputStream/OuputStream

  字符流:操作的内容为字符 Reader/Writer