zoukankan      html  css  js  c++  java
  • 多线程第一天

    多线程

    1.要想了解多线程,必须先了解线程;要了解线程就要先了解进程,因为线程是依赖于进程而存在的;说起进程,就不得不说下程序。程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。
    
    2.什么是进程?
        a.进程是执行程序的一次执行过程.它是一个动态的概念,是系统资源分配的单位.
        b.只有运行的程序才有进程.
        c.一个进程可以有多个线程
    
    3.多进程有什么意义?
        a.单进程只能做一件事情
        b.多进程同一时间段能做多件事情,可以执行多个任务
    
    4.什么是线程?
        a.多进程内可以执行多个任务,而每一个任务就是一个线程
        b.线程是一个程序的执行单元.执行路径,是一个程序使用cpu最基本的单位,是一个独立的执行路径
        c.单线程:程序只有一条执行路径
        d.多线程:程序有多条执行路径
    
    5.多线程的意义?
        a.多线程的存在是为了提高应用程序的使用率
        b.程序的执行其实都是在抢CPU的资源,CPU的执行权。
    	c.多个进程是在抢这个资源,而其中的某一个进程如果执行路径比较多,就会有更高的几率抢到CPU的执行权。
            
    注意:
        很多多线程是模拟出来的,真正的多线程是指有多个cpu,即多核,如服务器。如果是模拟出来的多线程,即在一个cpu的情况下,在同一个时间点,cpu只能执行一个代码,因为切换的很快,所以就有同时执行的错局。
    

    线程创建方式

    Thread class 继承Thread类
    
    Runnable接口  实现runnable接口
    
    Callable接口	实现callable接口
    

    创建线程方式:继承Thread类和实现Runnable接口

    创建线程方式1:继承Thread类
    	1.自定义线程类继承Thread类
    	2.重写run() 方法,编写线程执行体
    	3.创建线程对象,调用start()方法启动线程
    
    注意:线程开启不一定立即执行,有CPU调度执行
    代码:
    public class ThreadTest extends Thread{
        @Override
        public void run(){
            线程体
            for (int i=0;i<20;i++){
                System.out.println("A--"+i);
            }
        }
    	//main线程   主线程
        public static void main(String[] args) {
            //创建一个线程对象
            ThreadTest threadTest=new ThreadTest();
            //调用start()方法
            threadTest.start();
            //线程体
            for (int i=0;i<20;i++){
                System.out.println("B--"+i);
            }
        }
    }
    
    创建线程方式2:实现Runnable接口
        1.定义MyRunnable类实现Runnable接口
        2.实现run()方法;编写线程执行体
        3.创建线程对象,调用start()方法启动进程
    代码:
    public class ThreadTest3 implements Runnable{
        
        @Override
        public void run() {
            for (int i=0;i<200;i++){
                System.out.println("A--"+i);
            }
        }
        //main线程   主线程
        public static void main(String[] args) {
            //创建Runnable接口的实现类对象
            ThreadTest3 threadTest3=new ThreadTest3();
            //创建线程对象,通过线程对象开启线程
            Thread thread=new Thread(threadTest3);
            thread.start();
            for (int i=0;i<1000;i++){
                System.out.println("B--"+i);
            }
        }
        
    总结:
        继承Thread类:
        	子类继承Thread类具备多线程能力
            启动进程:子类对象.start()
            不建议使用:避免OOP单继承局限性
        实现Runnable接口
            实现接口Runnable接口
            启动进程:传入目标对象+Thread对象.start()
            推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用
    

    Thread类中的方法

    String getName():返回该线程的名称。 
    void setName(String name):改变线程名称 
    void setPriority(int newPriority):更改线程的优先级。(1~10)
    int getPriority():返回线程的优先级 (每个线程默认优先级5)
    static Thread currentThread():返回当前正在执行的线程对象
    static void sleep(long millis):睡眠
    void join():等待该线程终止。 
    

    静态代理

    1.真实对象和代理对象都要实现同一接口
    2.代理对象要代理真实角色
        
    好处:
        1.代理对象可以做很多真实对象没法做的事情
        2.真实对象专注做自己的事情
    
  • 相关阅读:
    2013年第四届蓝桥杯C/C++B组省赛题目解析
    C++编程基础练习
    网络中TCP、IP、MAC、UDP的头部格式信息
    对C语言中指针的入门理解
    Linux命令_搜索文件
    【总结】牛客职播第九期:您的美团点评offer已送到门口,快来与我们一起影响世界!
    蓝桥杯题库基础练习:进制转换
    SQL存在一个表而不在另一个表中的数据, 更新字段为随机时间
    使用资源文件(内存)中的字体 或 使用文件中的字体
    C# 给某个方法设定执行超时时间 C#如何控制方法的执行时间,超时则强制退出方法执行 C#函数运行超时则终止执行(任意参数类型及参数个数通用版)
  • 原文地址:https://www.cnblogs.com/lhy8116/p/14205153.html
Copyright © 2011-2022 走看看