zoukankan      html  css  js  c++  java
  • 多线程快速入门

    线程与进程区别

    每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。

    使用线程可以把占据时间长的程序中的任务放到后台去处理,程序的运行速度可能加快,在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下可以释放一些珍贵的资源如内存占用等等。

    如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换,更多的线程需要更多的内存空间,线程的中止需要考虑其对程序运行的影响。通常块模型数据是在多个线程间共享的,需要防止线程死锁情况的发生。

    总结:进程是所有线程的集合,每一个线程是进程中的一条执行路径。

    进程中有多个不同的执行路径 进程是多个线程的集合

    进程展示之:进程展示执行中的程序

    一个操作系统有多个进程

    在进程中如何执行?

    代码的执行顺序,主线程 一个执行顺序 执行路径

     迅雷这样的用户体验好 三个执行路径

     提高程序效率

    使用多线程 各个线程互不影响

    多线程应用场景

     下载 分布式job需要同时一个执行多个任务调度

    多线程应用场景?

    答:主要能体现到多线程提高程序效率。

    举例: 迅雷多线程下载、数据库连接池、分批发送短信等。

    多线程创建方式

    第一种继承Thread类 重写run方法

     

    package com.toov5.thread;
    
    class CreateThread extends Thread{
        
        public void run(){
            for(int i=0; i<10 ;i++){
                System.out.println("i:"+i);
            }
        }
        
    }
    
    public class ThreadTest  {
         
        public static void main(String[] args) {
             CreateThread createThread     = new CreateThread();
             createThread.start();
        } 
         
        
    }

    输出的结果顺序 不按套路来

    第二种实现Runnable接口,重写run方法

    package com.toov5.thread;
    
    class CreateThread1 implements Runnable{
        
           public void run(){
               for(int i =0 ;i<10 ;i++){
                   System.out.println("i:"+i);
               }
           }
    }
    public class ThreadRunnableTest {
          public static void main(String[] args) {
             System.out.println("创建"); 
             CreateThread1 threadRunnable = new CreateThread1();
             System.out.println("启动");
             Thread thread = new Thread(threadRunnable);
             thread.start();
             System.out.println("结束");
          }    
        
    }

    第三种使用匿名内部类方式

    package com.toov5.thread;
    
    public class ThreadanonymityTest {
      
        public static void main(String[] args) {
            System.out.println("开始");
             new Thread(new Runnable() {
                
                @Override
                public void run() {
                    for(int i=0; i<10;i++){
                        System.out.println("i:"+i);
                    }
                    
                }
            }).start();
        System.out.println("结束");     
        }
        
        
    }

    使用继承Thread类还是使用实现Runnable接口好?

     使用实现实现Runnable接口好,原因实现了接口还可以继续继承,继承了类不能再继承。

     

    获取线程对象以及名称

    常用线程api方法

    start()

    启动线程

    currentThread()

    获取当前线程对象

    getID()

    获取当前线程ID      Thread-编号  该编号从0开始

    getName()

    获取当前线程名称

    sleep(long mill)

    休眠线程

    Stop()

    停止线程,

    常用线程构造函数

    Thread()

    分配一个新的 Thread 对象

    Thread(String name)

    分配一个新的 Thread对象,具有指定的 name正如其名。

    Thread(Runable r)

    分配一个新的 Thread对象

    Thread(Runable r, String name)

    分配一个新的 Thread对象

     PS:补充下同步和异步的概念

    代码从上往下依次进行执行 叫同步。 是单线程的

    异步是多线程的,多个执行路径。比如上面的代码有两条执行路径

     

     

     

  • 相关阅读:
    多重背包POJ1276不要求恰好装满 poj1014多重背包恰好装满
    哈理工1053完全背包
    求最小公倍数与最大公约数的函数
    Bus Pass ZOJ 2913 BFS 最大中取最小的
    POJ 3624 charm bracelet 01背包 不要求装满
    HavelHakimi定理(判断一个序列是否可图)
    z0j1008Gnome Tetravex
    ZOJ 1136 Multiple BFS 取模 POJ 1465
    01背包 擎天柱 恰好装满 zjut(浙江工业大学OJ) 1355
    zoj 2412 水田灌溉,求连通分支个数
  • 原文地址:https://www.cnblogs.com/toov5/p/9825501.html
Copyright © 2011-2022 走看看