zoukankan      html  css  js  c++  java
  • 线程的操作方法

    线程的操作方法

    嘿嘿!这里比较重复麻烦奥~~~ 我该怎么水过这篇博客

    1.线程休眠

      sleep()方法指定一个参数用于该线程的休眠时间,要加异常处理,线程醒来后并不能保证立刻进入运行状态,只能保证它进入就绪状态。

    代码:

    try {
        sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    2.线程加入

      当某个线程使用join()方法加入到另一个线程中时,另一个线程会等待这个空降兵执行完毕之后再继续执行。

    举个例子,线程加入一般是这样的情况:主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束。

    但是如果主线程处理完其他的事务后,需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后再结束,这个时候就要用到join()方法了。

    代码:提醒大家一下,这个就休眠时间啊真的是一门学问奥。

    station.java

    package com;
    
    public class station extends Thread {
    
        int ticket=10;//票数
        static Object lock="locked";
        
        boolean node = true;
        public station(String name) {
            super(name);
        }
    
        @Override
        public void run() {
            super.run();
            while(ticket>0) {
                synchronized(lock) {
                    if(ticket>0) {
                        System.out.println(getName()+"卖出第"+ticket+"张票");
                        --ticket;
                        if(ticket==5&&node) {
                            try {
                                Thread.sleep(1000);
                                Thread addticket = new Thread(new Runnable() {
                                    @Override
                                    public void run() {
                                        add();
                                        System.out.println("补票了");
                                    }
                                });
                                addticket.join();
                                addticket.start();
                                Thread.sleep(2000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }else {
                        System.out.println("票卖完了");
                    }
                }
    //            try {
    //                sleep(1000);
    //            } catch (InterruptedException e) {
    //                e.printStackTrace();
    //            }
            }
        }
        public void add() {
            ticket+=6;
            node=false;
        }
    
    
    }

    App.java

    package com;
    
    import java.util.ArrayList;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;
    
    
    public class App {
    
        public App() throws InterruptedException, ExecutionException {
            
            s1.start();//启动
        }
        public static void main(String[] args) throws InterruptedException, ExecutionException {
            new App();
        }
    }

    3.线程中断

      现在已经不用stop();了。现在提倡再run()方法中使用无限循环然后用boolean标记控制循环的终止。

    代码:

    boolean isContinue = true;
        public void run() {
            while(true) {
                ..........
                ..........
                ..........
                if(isContinue)//布尔值
                    break;
            }
        }
        private void setContinue() {
            this.continue = false;
        }

    4.线程礼让(   yield();不过这个似乎没多少用,我就不解释了,想要了解的话就搜别人的博客看吧   )拜拜!~!~!~

  • 相关阅读:
    Unable To Open Database After ASM Upgrade From Release 11.1 To Release 11.2
    11g Understanding Automatic Diagnostic Repository.
    How to perform Rolling UpgradeDowngrade in 11g ASM
    Oracle 11.2.0.2 Patch 说明
    Pattern Matching Metacharacters For asm_diskstring
    Steps To MigrateMove a Database From NonASM to ASM And ViceVersa
    Upgrading ASM instance from Oracle 10.1 to Oracle 10.2. (Single Instance)
    OCSSD.BIN Process is Running in a NonRAC Environment
    Steps To MigrateMove a Database From NonASM to ASM And ViceVersa
    On RAC, expdp Removes the Service Name [ID 1269319.1]
  • 原文地址:https://www.cnblogs.com/cattree/p/10662572.html
Copyright © 2011-2022 走看看