java多线程的学习

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接口是非常灵活的。

看源码发现:

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状态。点源码进去看看

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

转载于:https://www.cnblogs.com/fuckingPangzi/p/10079051.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值