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();不过这个似乎没多少用,我就不解释了,想要了解的话就搜别人的博客看吧   )拜拜!~!~!~

  • 相关阅读:
    在线教程的游戏化-20分钟做了个demo
    (转)内江师院网络专业大二学子实习快报
    学云网线下国信安教育走进川师大
    Ruby on Rails框架开发学习
    Unity3D编程学习分享
    后高考时代规划专家推荐 学云网“学历技能就业”
    Tomcat调优及JMX监控
    XenServer pool 移除server 设置master
    计算程序总行数的Python代码
    SQL Server 无法生成 FRunCM 线程。请查看 SQL Server 错误日志和 Windows 事件日志
  • 原文地址:https://www.cnblogs.com/cattree/p/10662572.html
Copyright © 2011-2022 走看看