zoukankan      html  css  js  c++  java
  • 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状态

  • 相关阅读:
    GTK+ 3.6.2 发布,小的 bug 修复版本
    RunJS 新增 Echo Ajax 测试功能
    Mozilla 发布 Popcorn Maker,在线创作视频
    Sina微博OAuth2框架解密
    Mina状态机State Machine
    Mozilla 发布 Shumway —— 纯JS的SWF解析器
    Code Browser 4.5 发布,代码浏览器
    ROSA 2012 "Enterprise Linux Server" 发布
    ltrace 0.7.0 发布,程序调试工具
    Artifactory 2.6.5 发布,Maven 扩展工具
  • 原文地址:https://www.cnblogs.com/fuckingPangzi/p/10079051.html
Copyright © 2011-2022 走看看