码迷,mamicode.com
首页 > 编程语言 > 详细

多线程——讲的不错,认认真真做的笔记,认真再看!

时间:2017-11-04 00:06:42      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:top   一起   new t   两种   相同   多个   访问   创建   设置   

一、线程和进程

进程可以看成是一个运行中的程序,每个应用就是一个运行的程序,可以看成是一个进程。操作系统会为每个进程分配内存空间和CPU时间等。多任务支持了多进程。
线程成为轻量级的进程,有自己的运行环境。线程存在于进程中,每个进程最少有一个线程,线程分享进程的资源。例如程序中同时进行数据读取和数据处理,这样能够提高效率,这时候就需要两个线程。

二、java中的多线程实现的方式

java中提供了两种实现线程的方式:
  • 通过继承Thread类实现多线程
               1、继承Thread类实现线程类,需要覆盖run方法
                     public class MyThread extends Thread{
                           public void run(){
                            //定义线程要执行的代码
                           }
                     }
               2、通过线程类创建线程对象:
                      Thread t=new MyThread();
                      Thread t=new MyThread("线程的名字");
               3、线程的启动通过start方法实现
看下面这个例子1:
  • 这个结果就是,main主线程开始,然后进行其他的线程,主线程结束,由于系统分配着进行时间,所以两个线程穿插交替进行,可以运行一下体验一下,如图下面:
    技术分享
  • 通过实现Runable接口实现多线程
               1、需要实现run方法
                     public class MyThread2 implements Runable{
                           public void run(){
                            //定义线程要执行的代码
                           }
                     }
               2、创建线程对象:
                      Thread tt=new MyThread(new MyThread2());
               3、线程的启动通过start方法实现
看下面的例子2。
经过实践可以,跟上面那个结果类似

三、线程的名字

  • 通过继承Thread类实现多线程
                     class MyThread extends Thread{
                           public MyThread(String name){
                           super(name);
                           }
                           ......
                     }
  • 通过实现Runable接口实现多线程
                      MyRunnable r=new MyRunnable();
                      Thread t3=new Thread(r,"线程3");
  • 通过Thread对象的setName方法设置
  • 调用getName方法得到线程的名字
  • 例子6.3线程名字的使用

四、线程的优先级

  • 默认情况下,一个程序的多个线程具有相同的优先级,也就是获得CPU的概率相同。可以通过设置线程的优先级来调整每个线程获得CPU的机会大小。
  • 调用线程的setPriority方法设置优先级,参数表示优先级。优先级的最小值是1,最大的值是9,默认值是5。
  • 需要设置优先级的情况比较少。
  • 例子(6.4)线程的优先级

五、让线程等待

根据需要可以让线程等待一段时间再执行,可以通过4种方式:
  • 使用sleep让线程等待一段时间
  • 使用yield方法让线程让出执行机会
  • 使用join让线程等待
  • wait方法与notity一起使用,在后面单独介绍,这里介绍3个
技术分享
技术分享
技术分享
例子6.8——输出结果0
例子6.9——输出结果5

六、实例:实现人能够同时说话和开车

技术分享

七、资源同步

多线程的问题
...
int tickets = getTicket();      (1)
setTickets(tickets-1);       (2)
...
假设A线程和B线程分别表示两个售票窗口,可能的执行过程如下:
A线程执行(1),B线程执行(1),A线程执行(2),B线程执行(2),
资源同步可以使用关键词synchronized,相当于对资源加锁,加锁之后其他代码就不能访问了,只有等当前代码执行完之后并解锁,其他的代码才能访问。synchronized可以用在对象上,也可以用在方法上,也可以用在一段代码上。
例子:
6.11在对象上加锁
6.12在方法上加锁

八、wait和notify

某个线程在执行的过程中发现需要的资源不可用的时候,就需要等待,调用资源的wait方法,让当前线程处于等待状态。
处于等待状态的线程自己不能继续执行,必须等待其它线程唤醒它,其他线程通过notify或者notifyAll方法来唤醒。
技术分享
Producer.java
这个项目Java文件已加载为附件

 

附件列表

     

    多线程——讲的不错,认认真真做的笔记,认真再看!

    标签:top   一起   new t   两种   相同   多个   访问   创建   设置   

    原文地址:http://www.cnblogs.com/jichui/p/7780793.html

    (0)
    (0)
       
    举报
    评论 一句话评论(0
    登录后才能评论!
    © 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
    迷上了代码!