java多线程的学习

Wesley13
• 阅读 589

1,进程和线程 

1,一个进程和另外一个进程的之间是隔离的。但是对cpu来说都是一样的。一边打游戏,一边看电影。

2,两个线程是共享着同一片资源,在同一个进程里面,例如在腾讯视频,同时打开两部电影。

3,他们的目的都是充分的利用cpu。

4,java虚拟机就是一个进程。

5,线程的实现两种方式 Runnable接口,继承Thread类。

6,在主函数psvm开启的线程,叫主线程。没有多线程的时候,就只有一个主线程。

start()只是进入执行状态,并不是立即执行,执行得看cpu心情。

public class PrintChar implements Runnable{

    private char c;
    private Integer times;

    public PrintChar(char c, Integer times) {
        this.c = c;
        this.times = times;
    }

    public PrintChar() {
    }

    @Override
    public void run() {

        for(int i=0;i<times;i++){
            System.out.println(c);
        }
    }
}

public class Start {

    public static void main(String[] args) {
        Thread t1 = new Thread(new PrintChar('A',50));
        Thread t2 = new Thread(new PrintChar('B',50));
        t1.start();
        t2.start();
    }
}

运行发现,打印A,B是交替,并不是A打印完了,再打印B

还有一种是方式是继承Thread类

public class PrintCharOther extends Thread {


    private char c;
    private Integer times;

    public PrintCharOther(char c, Integer times) {
        this.c = c;
        this.times = times;
    }

    public PrintCharOther() {
    }

    @Override
    public void run() {

        for(int i=0;i<times;i++){
            System.out.println(c);
        }
    }
}

PrintCharOther t1 = new PrintCharOther('a',100);
        PrintCharOther t2 = new PrintCharOther('b',100);
        t1.start();
        t2.start();

那么这两种方式那种好呢,java里面是多实现,单继承,一个类只能继承一个父类,一个爹,但是可以实现多个接口。

实现Runnable接口是非常灵活的。

看源码发现:

java多线程的学习

Thread类也是实现Runnable接口的。

几种线程里面的方法

//yield() 执行这个代码的时候,让出线程,让出线程并不代表下一次不执行,可能下一次cpu还可能选中
            //让出cpu的执行权
            Thread.yield();

//sleep()方法是让线程睡一会儿,里面的millis是毫秒
                if (i>=10){
                    Thread.sleep(3000);
                }

还有一个设置线程的interrupt()方法,这个方法相对于stop()方法来说,很文雅,

t1.interrupt();

只是改了他t1方法的的标志位,不会造成脏数据

interrupt要配合着使用,真正决定线程运行不运行还是要自己决定,这个下面的代码的意思,

当当前线程被打断了,我自己break一下,跳出去,终止不终止,由线程本身决定。

if (Thread.currentThread().isInterrupted()){
    break;
}

还有一个方法:

if (Thread.interrupted()){
     System.out.println(Thread.currentThread().isInterrupted() );
}

intertupted()方法,这个是看看是不是interrupt我了,然后顺便清除interrupt状态。点源码进去看看

java多线程的学习

就是当当前被intertupt了,就是true,返回true,然后再设置为false,就是说顺便清除interrupt状态

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
DevOpSec DevOpSec
3年前
python多线程原理和详解(一)
python多线程原理和详解线程概念1.线程是什么?线程也叫轻量级进程,是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是进程中的实际运作单位。线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行。
Wesley13 Wesley13
2年前
java多线程常见问题
Java多线程是什么Java提供的并发(同时、独立)处理多个任务的机制。多个线程共存于同一JVM进程里面,所以共用相同的内存空间,较之多进程,多线程之间的通信更轻量级。依我的理解,Java多线程完全就是为了提高CPU的利用率。Java的线程有4种状态,新建(New)、运行(Runnable)、阻塞(Blocked)、结束(Dead),关键就在于阻塞(Bl
Stella981 Stella981
2年前
Python实现多进程
Python可以实现多线程,但是因为GlobalInterpreterLock(GIL),Python的多线程只能使用一个CPU内核,即一个时间只有一个线程在运行,多线程只是不同线程之间的切换,对多核CPU来说,就是巨大的浪费。如4核CPU,实际上只利用了一个核,CPU利用率只有25%。要充分利用多核CPU,可以实现Python的多进程。首先,im
Wesley13 Wesley13
2年前
4、jstack查看线程栈信息
1、介绍利用jps、top、jstack命令找到进程中耗时最大的线程,以及线程状态等等,同时最后还可以显示出死锁的线程查找:FoundoneJavaleveldeadlock即可1、jps获得进程号!(https://oscimg.oschina.net/oscnet/da00a309fa6
Stella981 Stella981
2年前
Noark入门之线程模型
0x00单线程多进程单线程与单进程多线程的目的都是想尽可能的利用CPU,减少CPU的空闲时间,特别是多核环境,今天咱不做深度解读,跳过...0x01线程池锁最早的一部分游戏服务器是采用线程池的方式来处理玩家的业务请求,以达最大限度的利用多核优势来提高处理业务能力。但线程池同时也带来了并发问题,为了解决同一玩家多个业务请求不被
Wesley13 Wesley13
2年前
Java多线程系列(1)
本章主要内容有:1.线程进程的区别2.线程的生命周期3.Java内存模型原子性,可见性及有序性4.线程池及Java实现1.线程进程的区别线程:程序运行的最小单位进程:资源分配的最小单位一个进程可以有多个线程,多个线程共享进程里面的数据线程间通讯相对更加方便,进程间通讯需要通过IPC(
Wesley13 Wesley13
2年前
Java面试官都爱问的多线程和并发面试题汇总,多刷一题,多份安心!
Java多线程面试问题1、进程和线程之间有什么不同?一个进程是一个独立(selfcontained)的运行环境,它可以被看作一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含了不同的类和程序的单一进程。线程可以被称为轻量级进程。线程需要较少的资源来创建和驻留在进
Wesley13 Wesley13
2年前
Java线程与多线程
1线程与多线程1.1线程是什么?线程(Thread)是一个对象(Object)。用来干什么?Java线程(也称JVM线程)是Java进程内允许多个同时进行的任务。该进程内并发的任务成为线程(Thread),一个进程里至少一个线程。Java程序采用多线程方式来支持大量的并发请求处理,程序如果在
Wesley13 Wesley13
2年前
Java中多线程并发体系知识点汇总
一、多线程1、操作系统有两个容易混淆的概念,进程和线程。进程:一个计算机程序的运行实例,包含了需要执行的指令;有自己的独立地址空间,包含程序内容和数据;不同进程的地址空间是互相隔离的;进程拥有各种资源和状态信息,包括打开的文件、子进程和信号处理。线程:表示程序的执行流程,是CPU调度执行的基本单位;线程有自己的程序计数器、寄存器、堆栈和帧。同一进