多线程

来源:互联网 发布:阿里云 域名 指向淘宝 编辑:程序博客网 时间:2024/06/10 19:46

toByteArray():将当前的这个内存操作输出流对象转换成字节数组

多线程

如果程序的执行路径只有一条:单线程程序

如果一个程序的执行路径有多条:多线程程序

进程和线程的概念: 线程是依赖于进程存在的,

进程:关查任务管理器:正在运行的程序就是一个进程

   进程来说:进程就是系统分配资源调用的一个独立单位.

多进程有什么意义?

1) 现在的计算机是一种多进程计算机,即在做一件事的时候能同事做另一件事.

2) 多进程是为了提高计算机CPU的使用率.

多进程:在一边打游戏,一边听音乐,这两个进程是同时进行的?

  打游戏会开启一个游戏进程,在听音乐时开启一个音乐进程.两者不是同时同时进程,感觉是同时进行,其实并不是.由于Cpu的一点点时间片在两者之间进行高效的切换,

线程?

  线程是依赖与进程存在,一个线程相当于进程中的任务

 多线程的意义:

1) 一个进程中开启了多个任务,每一个任务(线程),他们在互相抢占CPU的执行权,(提高程序的执行效率)

2) 多项成在抢占CPU的执行权,特点:具有随机性

多线程:即一个程序的执行路径有多条.

面试题:  Jvm,Java虚拟机是多线程代吗?

   是一个多线程程序,由于Java虚拟机中自带了一个垃圾回收器,来确保程序不会轻易的造成内存溢出的问题.

  至少开启了两条子线程:

1) 当前程序在执行代码的时候,会执行main()主线程.

2) 垃圾回收器会开启一个垃圾回收线程,来确保内存不会溢出,将不用的变量或者没有更多引用的对象回收掉.

要实现多线程程序,必须创建一个进程.

创建进程进行需要调用系统资源进行创建,Java语言不能直接调用喜用资源.

C/C++语言是可以创建系统资源,然后用Java语言调用C/C++已经封装好的东西

Java----->:Thread

多线程程序的实现

1) 创建MyThread继承自Thread

2) MyThread中重写run方法,run方法调用相当于调用了一个普通方法,并不会出现随机性;start方法调用,其实是通过Jvm调用线程中的run方法来进行多个线程抢占CPU的执行权

3) 在主线程中,创建该类的实力对象,启动线程

并行和并发:

   并行:指的是同一时间点

   并发:值同一时间段.

为什么要重写run(),run\方法里面执行的事耗时的操作

 

如何获取线程名称,getName

my1.start()my2.start()子线程都会执行这段代码,

默认优先级:5

priority方法

 

     yield方法暂停当前正在执行的对象.

     join 终止当前正在执行的对象

  线程的生命周期

1) 新建状态: 创建实力对象(线程对象的创建)

2) 就绪状态:这些线程有执行资格,还具有Cpu的执行权

3) 线程阻塞状态:  sleep(); notify();

4) 运行状态:调用start(),通过Jvm调用run()执行,被别人抢到CPU的执行权,状态变为3).

5) 死亡状态:线程对象没有更多的引用了,被垃圾回收器回收掉

守护线程

 

   join()

   yield()

   stop()

   setDeamon()

sleep()

wait()

面试题:多线程的实现方式有几种,分别是几种

      笔试答三种方式,

            第三种和线程池有关,Executor

     口头答两种:继承Thread,实现Runnable接口

实现的两种方式对比:

方式一:

1) 自定义一类MyThread继承子Thread

2) 重写Thream类中的run()方法

3) 主线程中创建该线程类对象

4) 启动线程     

注意:

1)启动线程使用start(),调用run方法相当于调用普通方法

2)一个线程不能启动多次,非法线程状态异常

方式2:

1) 自定义一个类:MyThread,实现Runnable接口

2) 实现run()方法

3) 主线程中创建MyRunnable对象

4) 在创建Thread类对象,MyRunnable对象作为参数传递

5) 启动线程

Java的设计模式:

       简单工厂模式.工厂方法模式,装饰者模式,单例模式

   饿汉式:

懒汉式

    (问的最多)

    

多个线程在抢占CPU的执行权,CPU的一点点时间片具有特性,:原子性操作(最基本)比如变量++/- -.

  解决多线程安全问题的标准(也是判断一个多线程是否有安全问题的标准):

1) 当前是否是一个多线程环境

2) 多线程环境中是否有共享数据.

3) 是否有多条语句对共享语句进行操作

同步锁对象:synchronized(任意类).理解为门的开和关.一次只能进去一个线程.所以就不会出现一张票多个窗口同时出售问线程安全问题

原创粉丝点击