继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

进程和线程

天涯尽头无女友
关注TA
已关注
手记 85
粉丝 9
获赞 42

进程和线程

一、引入

1.进程:每个独立执行的程序

4.多线程:在同一个进程(应用程序)中同时执行多个线程

二、区别:

2.线程:程序中维系运行的分支

举例:人操作系统,吃进程,线程:睁眼、用手拿、张嘴吃

3.多进程:在操作系统中同时运行多个程序

线程的状态

一、线程状态的分类

    NEW:创建一个线程,比如MyThread  mt=new MyThread();

    RUNNABLE:可运行状态,比如mt.start();

    WAITING/TIMED_WAITING:不可运行状态,比如MyThread.sleep();

    BLOCKED:锁定状态,当前线程如果被解锁,还可以再次运行

    TERMINATED:终止状态,线程体执行结束

    spacer.gif

二、设置线程的优先级

1.范围:1-10

    java自带优先级参数

    MAX_PRIORITY:10

    MIN_PRIORITY:1

    NORM_PRIORITY:5

2.方法

    setPriority(int p)/getPriority()

线程的同步:

一、引入

      当一个进程有多个线程时,每个线程都会抢占资源,此时会引发一系列问题,引入同步的概念,可解决这些问题

二、synchronized关键字

    使用:

        1.锁对象

           synchronized(obj){...}或   synchronized(this){...}

        2.锁方法:

            修饰符  synchronized 返回值类型 方法名(){....}

死锁

一、引入

            线程1锁住资源A 等待资源B,线程2 锁住资源B等待资源A,两个线程都在等待自己需要的资源,而这些资源被

            另外的线程锁住,这些线程你等我我等你,谁也不愿意让出资源,这样死锁就产生了

    解决:在定义锁时,也就是使用synchronized时,需要考虑当前资源被锁后,其他资源是否也同时被锁


生产者与消费者:

一、引入:

        生产者将产品交给店员,而消费者从店员处取走产品,店员一次只能持有固定数量的产品,

        如果生产者生产了过多的产品,店员叫生产者等一下,

        如果店中有空位放产品了再通知生产者继续生产;

        如果店中没有产品了,店员会告诉消费者等一下,

        如果店中有产品了再通知消费者来取走产品。


容器类的线程安全:

方法:

        List list = Collections.synchronizedList(new ArrayList());


线程的创建和启动

一、创建和启动的方式

方式1:继承Thread类

  步骤:①创建一个类,继承Thread

             ②重写run方法,该手动导入

             ③使用Thread类对象调用start()方法启动

方式2:实现Runnable接口

步骤:①创建一个类,实现Runnable接口

           ②重写run()方法,自动提示

            ③创建一个Runnable子类对象,使用Thread构造器将该对象放入,初始化该Thread对象,调用start()方法

二、两种方式的比较:

spacer.gif

三、注意:

1.Thread类在lang包下

2.程序启动后会创建两个线程,一个是垃圾回收器线程,一个是主线程,main()方法运行在主线程中

3.关于run()方法

    ①它是线程体,启动一个线程,会执行该方法内的代码

    ②启动线程时使用start()方法,此线程进入RUNNABLE状态

    ③在启动线程时不用调用run()方法,因为run()方法没有实现多线程机制

Thread类方法:

spacer.gif

线程的调度:

一、调度方法:

1.线程睡眠:Thread.sleep(long millis) throws interruptedException 方法

          使线程转到阻塞状态

          millis参数设定睡眠的时间,以毫秒为单位

          当睡眠结束后,就转为就绪(Runnable)状态

2.线程让步:

         Thread.yield()方法

         暂停当前正在执行的线程对象,把执行机会让给相同或者更高优先级的线程

3.线程加入:

         join()throws  InterruptedException 方法

         在当前线程中调用另一个线程的join()方法,则当前线程转入WAITING状态,

         直到另一个线程运行结束,当前线程再由阻塞转为就绪状态

二、结束线程

       1.使用标志位,较为常用

       2.对于sleep或wait中的线程,使用interrupt()来终止线程

原文链接:http://www.apkbus.com/blog-491882-60759.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP