zoukankan      html  css  js  c++  java
  • 线程

    线程的概念
          一个程序中的方法有几条执行路径, 就有几个线程

    线程的创建:
         两种方式:
              1, 继承Thread类
                          class TestThread extends Thread {......}
              2, 实现Runnable接口, 然后作为参数传入到Thread类的构造方法中
                          class TestThread implements Runnable {......}

    线程的启动:
              调用线程类中的start()方法, 不能直接调用run()方法, 直接调用run()方法那叫方法调用, 不是启动线程

    线程常用方法
          isAlive()
                  判断线程是否还活着, 调用start()之前和终止之后都是死的, 其他的都是活的
          interrupt()
                  停止线程
          getPriority()

          setPriority()
               
    设置优先级, 优先级的概念: 谁的优先级高, 谁执行的时间就多
          Thread里面的默认优先级:
                  Thread.MIN_PRIORITY = 1
                  Thread.MAX_PRIORITY = 10
                  Thread.NORM_PRIORITY = 5
                  Thread.sleep(long millions)
                                 将程序暂停一会
          join()
              合并线程
         yield()---礼让
                让出CPU执行其他线程
         wait()---简单了解
         notify()---简单了解
         notifyAll()---简单了解

    public class TextThread {
        public static void main(String[] args){
            MyTherad mt = new MyTherad();
            // mt.start();
            Thread t = new Thread(mt);
            System.out.println("调用start之前:"+t.isAlive());
            t.start();
            System.out.println("调用start之后:"+t.isAlive());
            for(int i=0;i<50;i++){
                System.out.println("main"+i);
            }
        }
        
        public static void m(){
            for(int i=0;i<50;i++){
                System.out.println("===="+i);
            }
        }
    }
    
    class MyTherad implements Runnable{   //实现接口
        @Override
        public void run() {
            for(int i=0;i<50;i++){
                System.out.println("===="+i);
            }
        }
    }
    
    /*class MyThread extends Thread{
    
        @Override
        public void run() {
            for(int i=0;i<50;i++){
                System.out.println("===="+i);
            }
        }
        
    } */
    import java.util.Date;
    
    public class TextThread2 {
        public static void main(String[] args){
            MyNewThread mt = new MyNewThread();
            Thread t = new Thread(mt);
            t.start();
    /*        try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    */
            //t.interrupt();
            //t.stop();
            //终止进程将run方法结束进程就结束了
            //MyNewThread.flag= false;
        } 
    }
    class MyNewThread implements Runnable{
    
        @Override
        public void run() {
            while(true){
                System.out.println(new Date());
                try{
                Thread.sleep(1000);
               } catch(Exception e) {
                   System.out.println("线程终止");
                   System.out.println(e.getMessage());
                   
               }
            }
        }    
    }

    线程同步

    银行取钱例题

    public class Text {
        public int money =3000;
        public void getMoney(String name,int mon){
            synchronized(this){
                if(money>mon && money>0){
                    money -= mon;
                    System.out.println("姓名"+name);
                    System.out.println("取款"+mon);
                    System.out.println("剩余金额:"+money);
                }else{
                    System.out.println("姓名"+name);
                    System.out.println("余额不足");
                    System.out.println("剩余金额"+money);
                }
            }
        }
    }
    public class Text2 {
        public static void main(String[] args){
            MyTherad at = new MyTherad();
            
            Thread t1 = new Thread(at);
            Thread t2 = new Thread(at);
            
            t2.setName("刘毅");
            t1.setName("蒋桥");
            
            t1.start();
            t2.start();
        }
    }
    class MyTherad implements Runnable{
        public Text bank = new Text();
        @Override
        public void run() {
            bank.getMoney(Thread.currentThread().getName(),2000);
            
        }
        
    } 

    死锁例题

    public class Text3{
        public static void main(String[] args){
             Text3 d1 = new Text3();
             Text3 d2 = new Text3();
             
             d1.flag=1;
             d2.flag=2;
             
             Thread t1 = new Thread();
             Thread t2 = new Thread();
             
             t1.start();
             t2.start();
         }
        public static Object obj1 = new Object();
        public static Object obj2 = new Object(); 
        
        public int flag;
        
        public void run() {
            if (flag == 1) {
                System.out.println("这是第" + flag + "个线程");
                synchronized (obj1) {
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (obj2) {
                        System.out.println("第" + flag + "个线程结束");
                    }
                }
            }
            
            if (flag == 2) {
                System.out.println("这是第" + flag + "个线程");
                synchronized (obj2) {
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (obj1) {
                        System.out.println("第" + flag + "个线程结束");
                    }
                }
            }
    
        }
    }
  • 相关阅读:
    react篇章-React State(状态)
    react篇章-React 组件-复合组件
    react篇章-React 组件-向组件传递参数
    react篇章-React 组件-ES6 class 来定义一个组件
    React篇章-React 组件
    复习常用算法_冒泡算法
    项目管理小结(如何做好一个百万级项目甚至千万级别的项目)
    AOP切点切面内容
    Spring 框架
    Spring MVC 框架
  • 原文地址:https://www.cnblogs.com/jgjk/p/7274485.html
Copyright © 2011-2022 走看看