美文网首页
多线程笔记一

多线程笔记一

作者: There_7f76 | 来源:发表于2019-10-19 18:47 被阅读0次

多线程笔记一

1.并发与并行

并发:多个事件在同一个时间段内交替执行。

并行:指两个或者多个事件在同一时刻发生(同时发生)。

并发与并行.png

2.进程和线程的关系

进程:一个正在内存中运行的程序,每个进程都在内存中有单独的内存空间,一个应用程序可以同时有多个进程,进程是程序的一次执行的过程,是系统运行程序的基本单位,系统运行是一个程序从进程创建到进程消亡的过程。

线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。

3.进程调度方式

概念: 任务在并发执行的时候,每个任务都是交替执行的,而这种交替执行更换的规则就是进程的调度方式

  • 分时调度:所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间。

  • 抢占式调度:优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用的为抢占式调度。

    • 大部分操作系统都支持多进程并发运行,现在的操作系统几乎都支持同时运行多个程序。。

      实际上,CPU(中央处理器)使用抢占式调度模式在多个线程间进行着高速的切换。对于CPU的一个核而言,某个时刻,只能执行一个线程,而 CPU的在多个线程间切换速度相对我们的感觉要快,看上去就是在同一时刻运行。
      其实,多线程程序并不能提高程序的运行速度,但能够提高程序运行效率,让CPU的使用率更高。

4.线程使用

4.1 Thread类

  • 线程 是程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。

  • 常用方法:

    //常用构造方法
    Thread() //分配新的 Thread 对象。
    Thread(Runnable target) // 分配新的 Thread 对象。         
    Thread(Runnable target, String name) // 分配新的 Thread 对象。       
    Thread(String name) //分配新的 Thread 对象。 
    
    //方法
    String getName() //返回该线程的名称。 
    void run()// 如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;               否则,该方法不执行任何操作并返回。 
    void start() //使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
    static Thread currentThread() //返回对当前正在执行的线程对象的引用。 
              
               
              
              
    
    

    4.2 线程创建和使用

线程定义使用.png

方法一

//Thread的子类
public class MyThread extends Thread{
    @Override
    public void run() {
        for (int i = 0; i <20 ; i++) {
            System.out.println(currentThread().getName()+"--->"+i);
        }
    }
}
//测试类
public class Demo_Thread {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start();
        for (int i = 0; i < 20; i++) {
            System.out.println(Thread.currentThread().getName()+"--->"+i);
        }
    }
}

方法二:

//Runable实现类
public class RunableImpl implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i <20 ; i++) {
            System.out.println(Thread.currentThread().getName()+"--->"+i);
        }
    }
}
//测试类
public class Demo_Thread {
    public static void main(String[] args) {
        RunableImpl runable = new RunableImpl();
        new Thread(runable).start();
        for (int i = 0; i < 20; i++) {
            System.out.println(Thread.currentThread().getName()+"--->"+i);
        }
    }
}
//另外的方法
public class Demo_Thread {
    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i <20 ; i++) {
                    System.out.println(Thread.currentThread().getName()+"--->"+i);
                }
            }
        }).start();
    }
}

相关文章

网友评论

      本文标题:多线程笔记一

      本文链接:https://www.haomeiwen.com/subject/gienmctx.html