美文网首页
Java基础整理(四)

Java基础整理(四)

作者: _笑口常开 | 来源:发表于2020-06-06 07:04 被阅读0次

    理论基础

    TLS

    • thread local storage —— 线程局部存储
    • 对于同一全局变量或者静态变量,每个线程访问的是同一个变量,这样多个线程同时访问同一个全局变量或者静态变量时会导致冲突,尤其是多个线程同时需要修改这一变量时
    • 通过TLS机制,为每一个使用该全局变量的线程都提供一个变量值的副本,每一个线程均可以独立地改变自己的副本,而不会和其他线程的副本冲突

    线程调用的两种方式

    • 继承 Thread
    • 实现 Runnable 接口

    代码实践

    方法一:继承 Thread

    public class Actor extends Thread {  //继承自线程类
        public void run() {
            System.out.println(getName() + " 是一个演员\n"); //使用了线程类的getName方法获得当前线程的方法
            
            int count = 0; //记录线程运行多少次
            boolean keepRunning = true;
            
            while (keepRunning) {
                System.out.println(getName() + " 登台演出 " + (++count));
                
                if (count == 8){ //停止演出
                    keepRunning = false;
                }
                if (count%2 == 0) { //中间加停顿
                    try {
                        Thread.sleep(3000);
                        System.out.println("");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
            System.out.println(getName() + " 演出结束了");
        }
    }
    

    main函数中调用查看执行效果

    public static void main(String[] args){
            Thread actor = new Actor();  
            actor.setName("Mr.Thread"); //线程里面有setName方法
            actor.start(); //线程开始工作
        }
    /*
    Mr.Thread 是一个演员
    
    Mr.Thread 登台演出 1
    Mr.Thread 登台演出 2
    
    Mr.Thread 登台演出 3
    Mr.Thread 登台演出 4
    
    Mr.Thread 登台演出 5
    Mr.Thread 登台演出 6
    
    Mr.Thread 登台演出 7
    Mr.Thread 登台演出 8
    
    Mr.Thread 演出结束了
    */
    

    方法二:实现Runnable接口

    class Actress implements Runnable { //实现接口 而且是在同一个类中再写一个类
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName() + " 是一个演员\n"); 
            //runnable中没有getName方法,获取当前线程的name
            int count = 0;
            boolean keepRunning = true;
            
            while (keepRunning) {
                System.out.println(Thread.currentThread().getName() + " 登台演出 " + (++count));
                if (count == 8){
                    keepRunning = false;
                }
                if (count%2 == 0) {
                    try {
                        Thread.sleep(3000);
                        System.out.print("\n");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
            System.out.println(Thread.currentThread().getName() + " 演出结束了");
        }
    }
    

    main函数中调用查看执行效果

    public static void main(String[] args){
            Thread actress = new Thread(new Actress(), "Ms.Runnable"); //setName方法合并了
            actress.start();
        }
    /*
    Ms.Runnable 是一个演员
    
    Ms.Runnable 登台演出1
    Ms.Runnable 登台演出2
    
    Ms.Runnable 登台演出3
    Ms.Runnable 登台演出4
    
    Ms.Runnable 登台演出5
    Ms.Runnable 登台演出6
    
    Ms.Runnable 登台演出7
    Ms.Runnable 登台演出8
    
    Ms.Runnable 演出结束了
    */
    

    相关文章

      网友评论

          本文标题:Java基础整理(四)

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