zoukankan      html  css  js  c++  java
  • 多线程相关

    多线程相关:
    1.线程跟进程的区别?
    线程是进程的执行单元。
    线程是进程的组成部分,一个进程可以拥有多个线程,一个线程必须有一个父进程。
    详解:http://blog.csdn.net/mxsgoden/article/details/8821936

    2.并发和并行
    并行是指同一时刻,有多条指令在多个处理器上同时执行
    并发是指同一时刻只能由一条指令执行,但过个进程指令被轮换执行,宏观上具有多个进程同时执行的效果

    3.线程的创建和启动
    --创建分两种方式:继承Thread类和实现Runnable接口
    //继承Thread类来实现多线程
    public class TestThread extends Thread{
    private int i;
    public void run(){
    for(int i = 0;i < 100; i ++){
    System.out.println(getName()+" " + i);
    }
    }
    public static void main(String[] args){
    for(int i = 0;i < 100; i ++){
    System.out.println(Thread.currentThread.getName()+" " + i);
    if(i == 20){
    new TestThread().start();
    new TestThread().start();
    }
    }
    }
    }
    //实现Runnable接口来实现多线程
    public class TestRunnable implements Runnable{
    private int i;
    public void run(){
    for(int i = 0; i < 100; i ++){
    System.out.println(Thread.currentThread().getName()+" " + i);
    }
    }
    public static void main(String[] args){
    for(int i = 0;i < 100;i ++){
    System.out.println(Thread.currentThread().getName()+" " + i);
    if(i == 20){
    TestRunnable rt = new TestRunnable();
    new Thread(rt,"new Thread1").start();
    new Thread(rt,"new Thread2").start();

    }
    }
    }
    }

    启动线程使用start() 而不是run()

    4.线程的生命周期:
    new(新建) -> Runnable(就绪) -> Running(运行) ->Blocket(阻塞) -> Dead(死亡)

    5.join()方法--一个线程等待另一个线程执行完毕,再继续执行。eg:A线程调用了B线程的join()方法,A就需要等待B线程执行完毕以后才能继续执行。

    6.后台线程--Daemon:所有线程都死亡,后台线程也会自动死亡
    setDaemon() 设置一个线程为后台线程,必须在start()之前调用
    isDaemon()

    7.线程睡眠--sleep()

    8.线程让步 yield() 让给同一优先级或比当前优先级高的线程,可以用设置优先级来做比较

    9.线程同步
    synchronized
    同步锁 lock

    拼了命、尽了兴
  • 相关阅读:
    [已解决] Python logging 重复打印日志信息
    scrapy
    Python 元编程
    MySQL性能优化 分区
    SQL Mode
    Golang 接口
    Python partial
    栈、队列(链表实现)
    Golang 位向量
    Java50题——学习以及思考
  • 原文地址:https://www.cnblogs.com/zj-phper/p/7645942.html
Copyright © 2011-2022 走看看