zoukankan      html  css  js  c++  java
  • 多线程概念、案例!

    1:线程的概念
    进程(任务):一个正在运行的程序
    进程的调度:CPU来决定什么时候该运行哪个进程 (时间片轮流法)
    
    
    1.2 线程和进程的关系
    a:一个进程可以创建多个线程
    b:线程必须依赖于进程而存在
    c:多个线程共享进程的空间
    d:进程和线程得到CPU的机会是均等的‘
    1.3 为什么要搞多线程
    我们可以让程序同时执行(并发执行)
    
    //Java只让我们创建线程,而不让我们创建进程
    
    HelloWorld.java
    javac HelloWorld.java
    java HelloWorld --->JVM 启动进程 
    Run Application --->JVM 启动进程
    
    //一个进程中至少要有一个线程
    main方法 被称为 主线程
    2: 线程的创建方式
    Thread 类
    方式1:继承Thread类
    1:自定义一个类,继承Thread类
    2:重写Thread类的run方法
    3:创建自定义类对象
    4:让自定义类对象调用start方法,启动线程
    
    
    class MyThread extends Thread{
    public void run(){
    //在此写你线程要执行的代码(木马查杀)
    }
    }
    //-----------------
    MyThread mt = new MyThread();
    mt.start(); //启动线程----->系统会自动调用run方法
    2.2 线程中的小方法
    public static void sleep(long millis)//线程执行到该语句,就会休眠---》让出CPU
    public static void yield() // 线程的礼让 线程执行到该语句 线程会将CPU的执行权主动让出
    // 让线程执行的更加均匀
    public final void setPriority(int newPriority) //设置线程的优先级
    
    
    创建线程的方式二:实现接口Runnable
    步骤 :
    1:自定义类实现Runnable接口
    2:重写run方法
    3: 创建自定义对象
    4:创建Thread类对象,并将自定义类对象作为参数传入Thread类
    5: 通过Thread类对象调用start方法启动线程
    
    class MyRunnable implements Runnable
    {
    public void run(){
    //线程要执行的内容
    }
    }
    
    //----------------
    MyRunnable mr = new MyRunnable();
    Thread t = new Thread(mr);
    t.start();//启动线程,系统会自动执行MyRunnable中的run方法
    
     
    
    3: 线程的同步(线程的安全)
    a:同一张票被卖了多次
    b:出现了负票问题
    
    线程的同步有三种实现方法:
    a: 同步代码块
    b: 同步方法
    c: Lock锁
    
    3.1 同步代码块
    synchronized (锁对象) //可以是任何一个对象,必须保证线程共享这个对象
    {
    //存放你要加锁的代码    
    }
    3.2 同步方法
    //同步方法的锁对象是this
    //静态方法的锁对象是类的Class对象
    public synchronized void sellTickets(){
    }
    
    3.3 两者的区别
    synchronized (锁对象) 
    {
    xxxxx
    yyyyy
    zzzzz
    sssss
    ttttt    
    }
    
    public synchronized void sellTickets(){
    xxxxx
    yyyyy
    zzzzz
    sssss
    ttttt    
    }
    
    
    //---------------
    public void method(){
    xxxxx
    yyyyy
    synchronized (锁对象) {
    zzzzz
    sssss
    ttttt    
    }
    }
    //同步方法,用户不能只指定锁对象,默认都是this
    //同步代码块,自己可以指定锁对象,锁对象可以是任何对象,只要线程共享即可
    
    3.4 Lock锁
    Lock:
    ReentrantLock 
    lock(); 加锁
    unlock(); 解锁
    
    1:创建ReentrantLock对象
    2:在适当的地方加锁
    lock()
    2:在适当的地方解锁
    unlock();
    
     
  • 相关阅读:
    删除表空间的时候遇到的问题:ORA-02429: 无法删除用于强制唯一/主键的索引
    删除
    Activity中使用getSystemService获得系统服务
    用多线程实现反应灵敏的界面(Java)
    用数组实现3个栈之固定分割(Java)
    Android小知识点20条
    Android数据库中数据文件的导出与查看
    MFC中使用CSplitterWnd分割窗口后设置视图大小的问题
    MFC中,通过preCreateWindow函数无法设置视图样式(包括窗口的大小)
    6:Node.js 路由
  • 原文地址:https://www.cnblogs.com/qiqimu/p/7635583.html
Copyright © 2011-2022 走看看