疯狂java


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

JavaSE编程基础


 

   JavaSE编程基础

  多线程

  理解程序、进程、线程的概念

  程序可以理解为静态的代码。

  进程可以理解为执行中的程序。

  线程可以理解为进程的近一步细分,程序的一条执行路径。

  2.如何创建java程序的进程(重点)

  方式一:继承于Thread类

  ①创建一个继承于Thread的子类

  ②重写Thread类的run()方法,方法内实现此子线程要完成的功能

  ③创建一个子类的对象

  ④调用线程的start():启动此线程,调用相应的run()方法

  ⑤一个线程只能够执行一次start

  方式二:实现Runnable接口

  ①创建一个实现Runnable接口的子类

  ②重写Thread类的run()方法,方法内实现此子线程要完成的功能

  ③创建一个子类的对象

  ④创建一个Thread对象,并把子类对象作为形参传递进去,调用线程的start():启动此线程,调用相应的run()方法

  两种方式的对比:

  联系:class Thread implements Runnable

  实现的方式较好1.解决了单继承的局限性 2.若多个线程有共享数据,建议使用实现方式,同时,共享数据所在的类可作为Runnable接口实现的类

  线程里常用的方法:start() run() currentThread() getName() setName(String name) yied()

  join() sleep() isAlive() getPriority() setPriority(int i);

  wait() notify() notifyAll()

  3.线程的生命周期

  新建 就绪 运行 阻塞 死亡

  4.进程的同步机制(重点)

  前提:如果我们创建多个线程,存在着共享数据,那么就有可能出现线程的安全问题:当其中一个线程操作共享数据时,还未操作完成,另外的线程就参与进来,导致对共享数据的操作出现问题

  解决方式:要求一个线程操作共享数据时,只有当其完成操作完成共享数据,其它线程才有机会执行共享数据

  方式一:同步代码块

  synchornized(同步监视器){

  //操作共享数据的代码

  }

  1.同步监视器:俗称锁,任何一个类的对象都可以充当锁,想要保证线程安全,必须要求所有的

  线程共用同一把锁

  2.使用实现Runnable接口的方式创建多线程的话,同步代码块中的锁,可以考虑是this,如果使用继承Thread类的方式慎用this

  3.共享数据:多个线程需要共同操作的变量。要明确哪部分是操作共享数据的代码。

  方式二:同步方法:将操作共享数据的方法声明为synchornized

  如:public synchronized void show(){//操作共享数据的代码}

  1.对于非静态方法而言,使用同步的话,默认锁为:this。如果使用继承的方式实现多线程的话,慎用

  2.对于静态的方法,如果使用同步,默认锁为:当前类本身

  总结:释放锁:wait();

  不释放锁:sleep() yied() suspend()(过时,可能导致死锁)

  死锁:不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成了线程的死锁

  5.进程的通信 如下的三个方法必须使用在同步代码块或同步方法中wait():当在同步中执行到此方法,则此线程“等待”,直至其他线程执行notify()的方法,将其唤醒,唤醒后继续其wait()后的代码

  notify() notifyAll():在同步中,执行到此方法,则唤醒其他的某一个或所有的被wait()的线程

  java常用类

  1.String类:是一个final类,代表不可变的字符序列

  String类与基本数据类型、包装类;与字符数组、字节数组的转化

  ①字符串--->基本数据类型、包装类:调用相应的包装类的parseXxx(String str);

  ②基本数据类型、包装类--->字符串:调用字符串的重载的vauleOf()方法

  ③字符串--->字节数组:调用字符串的getBytes()

  ④字节数组--->字符串:调用字符串的构造器

  ⑤字符串--->字符数组:调用字符串的toCharArray();

  ⑥字符数组--->字符串:调用字符串的构造器

  ⑦String--->StringBuffer:使用StringBuffer的构造器 newStringBuffer(StringBuffer str)

  ⑧StringBuffer--->String:使用StringBuffer的toString方法

  Stringbuffer类:可变的字符序列

  Stringbuild:可变的字符序列,jdk5.0新加,效率高,线程不安全

  常用方法:添加append() 删除delete(int startIndex,int endIndex) 修改setCharAt(int n,char ch) 查询charAt(int index) 插入inset(int index,String str) 反转reverse() 长度length()

  2.时间、日期类

  ①System类:currentTimeMillis():返回当前时间的long型值,此long值是从1970年1月1日0点0分00秒开始到当前的毫秒数。

  常用来计算时间差。

  ②Date类:java.util.Date

  Date d = new Date();//返回当前时间的Date:Mon May 12 15:17:01 CST 2014

  Date d1 = new Date(15231512541241L);//返回形参处此long型值对应的日期

  ③SimpleDateFormat :java.text.SimpleDateFormat

  格式化:日期---->文本 使用SimpleDateFormat的format()方法

  解析:文本--->日期 使用SimpleDateFormat的parse()方法

  ④Calendar:日历类

  获取实例:Calendar c = Calendar.getInstance();

  get()/set()/add()/date getTime()

  3.Math类 了解

  4.BigInteger BigDecimal类 了解