黑马程序员---Java基础---多线程

来源:互联网 发布:淘宝店家一直不发货 编辑:程序博客网 时间:2024/05/22 01:47


------- android培训、java培训、期待与您交流! ----------

一.进程:
   1.什么是进程:进程是操作系统的概念,它就是指在操作系统中运行的某个程序;
                 每个程序对于操作系统来说都是一个独立的进程,由操作系统管理,分配内存、CPU执行时间.....
       2.什么是多进程:是指操作系统可以同时管理多个应用程序的同时运行;
       3.多进程的意义:可以充分利用CPU资源;可以使用户有更好的操作体验,可以同时运行多个程序;
 二.线程:
    1.什么是线程:线程是指在一个"主进程"中,可以使某段代码以独立于主进程的方式运行。
                 线程中的代码,与主进程中的代码同时抢占操作系统资源;
    2.什么是多线程:多线程是指,一个主进程可以启动多个线程,去独立运行。
    3.多线程的意义:多线程也可以充分利用CPU资源;可以使我们的几段代码"同时"运行,提高我们的代码效率;
 三.并行和并发:
    1.并行:是指多个线程在"某个时间段内"同时运行;
    2.并发:是指多个线程在"某个时间点上"同时的访问同一资源;

四.线程:
 1.线程的实现方式:
  1).实现方式一:
   1.继承Thread类;
   2.重写run()方法;
   3.启动线程:
    1).实例化自定义对象;
    2).调用start()启动线程;
  2).实现方式二:
   1.实现Runnable接口; 
   2.重写run()方法;
   3.启动线程:
    1).实例化自定义对象;
    2).实例化Thread对象,并传递自定义对象;
    3).调用Thread的start()方法;

3).实现方式三:(JDK5)后
 1.自定义类,并实现Callable接口
 2.重写call()方法;
 3.使用"线程池"的方式启动线程;
方法:
  1).线程名称:
   setName(String n):设置线程名称:
   getName():获取线程名称;
  2).线程优先级:低-->高:1--10。默认:5
   setPriority(int n):设置优先级。如果不在1--10的范围内,则抛出异常;
   getPriority():获取线程的优先级;
  3).线程休眠:
   sleep(int n):静态方法。单位:毫秒;
  4).线程的加入:
   join():普通方法。其它线程会等待此线程执行完毕再执行;
  5).线程的礼让:
   yield():静态方法。退回到"就绪"状态。很可能会被操作系统再次分配运行;
  6).守护线程:
   setDaemon(boolean n):如果true,则为"守护线程"。当主线程结束时,守护线程也会跟着结束(但不会立即结束,会有个小缓冲)
  7).线程的中断:
   stop():不建议使用。
   interrupt():在线程内部,当处于以下三种情况:
     Object-->wait():
     Thread-->join():
     Thread-->sleep():
        会触发一个异常的产生;
 3.线程的声明周期:
  创建--》就绪--》运行--》死亡;
  面试题:当一个线程start()后,线程会立即被执行?
   错误!
 4.同步:
  1).同步代码块:
   synchronized(被锁的对象){
   }
  2).同步方法:
   public synchronized void show(){
   }
     A.静态方法内,可以包含"同步代码块",但被锁的对象不能使用this,一般是使用此类的Class对象;
     B.静态方法,可以被声明为"同步方法

JDK5的Lock锁:
 Lock l = ...;
 l.lock(); //加锁
 try{
  //同步的代码
 }finally{
  l.unlock();//释放锁
 }
五.死锁的问题:两个自定义类互相限制进程。
六.生产者和消费者:等待和唤醒机制:
 等待:Object-->wait();
 唤醒:Object-->notify()或者notifyAll()
   注意:课堂的例子只是:单生产和单消费的情况;
七.线程组:
 1.所有线程,默认情况下都属于:main线程组;
 2.设定线程组:ThreadGroup,Thread的构造方法;
 3.可以统一对线程组内的所有线程进行操作:停止线程;
八.线程池:JDK5
 1.获取线程池:
  Executors中的静态方法:
  public static ExecutorService newCachedThreadPool()
  public static ExecutorService newFixedThreadPool(int nThreads)
  public static ExecutorService newSingleThreadExecutor()
 2.ExecutorService中的方法:
  Future<?> submit(Runnable task):执行线程,并获取返回值;
  <T> Future<T> submit(Callable<T> task)
九.定时器:
 1.TimerTask(抽象类):定义任务
 2.Timer(类):设定"定时器"
十.设计模式:
 1.简单工厂模式:
 2.工厂方法模式:
 3.单例模式:
  1).饿汉式

package cn.itcast.demo17_单例模式_饿汉式;public class Student { private static Student stu = new Student(); private Student(){   } public static Student getInstance(){  return stu; }}


  2).懒汉式;


package cn.itcast.demo17_单例模式_懒汉式;public class Student { private static Student stu; private Student(){   } public static synchronized Student getInstance(){  if(stu == null){   stu = new Student();  }  return stu; }}


懒汉式在方法被调用时才创建一个新的空间,和饿汉式仅仅区别在这里。


0 0