zoukankan      html  css  js  c++  java
  • java简单多线程应用举例

    package com.swust.deamon;
    /**
    * 简单的多线程应用
    * @author Administrator
    *
    */
    public class ThreadDemo extends Thread {

    // 重写run方法
    @Override
    public void run(){
    for (int i=0;i<5;i++){
    computer();
    }
    }
    //main方法产生的两个线程和初始解释器线程加在一起三个一起执行
    public static void main(String[] args){
    //创建线程
    ThreadDemo firstThread = new ThreadDemo();
    //ThreadDemo secondThread = new ThreadDemo();
    Thread secondThread = new Thread(new Runnable() {

    @Override
    public void run() {
    // TODO Auto-generated method stub
    for (int i =0;i<5;i++){
    computer();
    }
    }
    });
    //设置这两个线程的属性
    if(args.length >= 1){
    //setPriority是设定线程的优先级
    firstThread.setPriority(Integer.parseInt(args[0]));
    }
    if(args.length >= 2){
    secondThread.setPriority(Integer.parseInt(args[1]));
    }
    //启动线程
    firstThread.start();
    secondThread.start();
    // 设定main函数内部线程
    for(int i=0;i<5;i++){
    computer();
    }
    }
    /*
    * set方法将每个线程中的副本的值设定为指定的值
    * get方法可以获取每个线程中的副本的值
    * */
    static ThreadLocal numcalls = new ThreadLocal<>();//用于记录每个线程调用computer方法的次数
    /*
    * sychronized 关键字 代表这个方法加锁 相当于不管是哪一个线程运行到这个方法时都要检查有没有其他线程
    * 正在使用这个方法,如果有的话需要等待当前线程执行完后再调用该方法。
    * */
    static synchronized void computer(){
    // 计算当前线程被调用的次数
    Integer n = (Integer) numcalls.get();
    if(n==null){
    n = new Integer(1);
    }else
    n = new Integer(n.intValue()+1);
    numcalls.set(n);
    //显示线程的名称及其调用次数
    System.out.println(Thread.currentThread().getName()+": "+n);
    // 模拟线程所产生的最大计算量
    for(int i=0,j=0;i<100000;i++){
    j+=i;
    try {
    //线程休眠
    Thread.sleep((int)Math.random()*100+1);
    } catch (InterruptedException e) {
    // TODO: handle exception
    }
    }
    Thread.yield();//当前线程暂停并允许其他线程执行,因此不会有饥饿线程
    }
    }

  • 相关阅读:
    Mysql 从库的备份中恢复一张表
    my.cnf 配置文件参数解释
    利用mvn deploy命令上传包(转)
    IntelliJ IDEA 项目文件旁边都有0%classes,0% lines covered
    idea启动java Maven项目,出现" java: 程序包xxxx不存在"
    org/apache/poi/POIXMLTypeLoader或者java.lang.NoSuchFieldError: RETURN_NULL_AND_BLANK
    elasticsearch,kibana,logstash.下载
    idea显示 RunDashboard ,多个启动项时列表显示
    写for循环快捷生成方式
    Could not transfer artifact xxx from/to xxx解决方案
  • 原文地址:https://www.cnblogs.com/walxt/p/12174827.html
Copyright © 2011-2022 走看看