线程模拟线程

class LoadDown implements Runnable{
     static double num=0;
      static double n1 =0;
      static double n2 =0;
      static double n3 =0;
      static double n4 =0;
    public void run(){

        while(true){
            synchronized ("锁") {
            if (num<=500) {
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                if(Thread.currentThread().getName().equals("下载线程一")){
                    n1 +=1;
                }else if (Thread.currentThread().getName().equals("下载线程二")) {
                    n2 +=1;
                }else if(Thread.currentThread().getName().equals("下载线程三")) {
                    n3 +=1;
                }else if(Thread.currentThread().getName().equals("下载线程四")) {
                    n4 +=1;
                }
                System.out.println(Thread.currentThread().getName()+"已下载"+(num/500)*100+"%");
                num++;
            }else{
                System.out.println("已经下载完成");
                break;
            }
            }

        }
         System.out.println("每个线程各下载: "+(n1/500)*100+"%"+"\t\t"+(n2/500)*100+"%"+"\t"+(n3/500)*100+"%"+"\t"+(n4/500)*100+"%"+"\t");
         System.out.println(n1+" "+n2+" "+n3+" "+n4);
    }

}

public class demo1 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        LoadDown loadDown =new LoadDown();
        Thread thread1=new Thread(loadDown,"下载线程一");
        Thread thread2=new Thread(loadDown,"下载线程二");
        Thread thread3=new Thread(loadDown,"下载线程三");
        Thread thread4=new Thread(loadDown,"下载线程四");

        thread1.start();
        thread2.start();
        thread3.start();
        thread4.start();

    }

}
时间: 2024-11-19 23:19:00

线程模拟线程的相关文章

使用ThreadGroup模拟线程池

参考文章: [1]创建线程池 http://sunnylocus.iteye.com/blog/223327?page=2#comments [2]线程组ThreadGroup  http://hubingforever.blog.163.com/blog/static/1710405792010913191791/ 一.为什么要用线程池: 1)减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务 2)可以根据系统的承受能力,调整线程池中工作线程的数目,防止因为消耗过多的内存

创建两个线程模拟火车站两个窗口售票程序

题目:创建两个线程模拟火车站两个窗口售票程序,窗口售票时间为1秒,两个窗口不能同时售票 #include<Windows.h> #include<iostream> using namespace std; //这是2个线程模拟买火车票的小程序 DWORD WINAPI Fun1Proc(LPVOID lpParameter);//thread data DWORD WINAPI Fun2Proc(LPVOID lpParameter);//thread data int inde

java---多线程及线程的概念

如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其实只有一半对,因为反应"多角色"的程序代码,最起码每个角色要给他一个线程吧,否则连实际场景都无法模拟,当然也没法说能用单线程来实现:比如最常见的"生产者,消费者模型". 很多人都对其中的一些概念不够明确,如同步.并发等等,让我们先建立一个数据字典,以免产生误会. 多线程

C#中的线程(二) 线程同步基础

1.同步要领 下面的表格列展了.NET对协调或同步线程动作的可用的工具:                       简易阻止方法 构成 目的 Sleep 阻止给定的时间周期 Join 等待另一个线程完成                       锁系统 构成 目的 跨进程? 速度 lock 确保只有一个线程访问某个资源或某段代码. 否 快 Mutex 确保只有一个线程访问某个资源或某段代码.可被用于防止一个程序的多个实例同时运行. 是 中等 Semaphore 确保不超过指定数目的线程访问某

Java线程模型、线程状态 - 线程(1)

1. 概述 众所周知,线程 - Thread 是比进程 - Progress 更轻量级的调度单位.简单来说,引入线程带来的好处是: 可以把一个进程 的资源分配和执行调度分开,各个线程 既可以共享进程 资源(内存地址.文件I/O等),又可以独立调度. 线程实现方式: 主流的操作系统都实现了线程 ,而编程语言一般会提供关于线程 的统一API操作.那么,编程语言如何去调用系统线程 呢?这方面主要有3种方式: 使用内核线程 - Kernel Thread. 一对一线程模型 ,这个最重要,下面详细讲. 使

Java之线程———GUI线程

当java程序包含图形用户界面(GUI)时,Java虚拟机在运行应用程序时会自动启动更多的线程,其中有两个重要的线程:AWT-EventQuecue 和 AWT-Windows. AWT-EventQuecue 线程负责处理GUI事件,AWT-EventQuecue线程负责将窗体或组件绘制到桌面.JVM保证各个线程都有使用CPU资源的机会. 样列: 1 package tes; 2 3 import java.awt.Color; 4 import java.awt.FlowLayout; 5

003-多线程-JUC线程池-几种特殊的ThreadPoolExecutor【newFixedThreadPool、newCachedThreadPool、newSingleThreadExecutor、newScheduledThreadPool】

一.概述 在java doc中,并不提倡我们直接使用ThreadPoolExecutor,而是使用Executors类中提供的几个静态方法来创建线程池: 以下方法是Executors下的静态方法,Executors中所定义的 Executor.ExecutorService.ScheduledExecutorService.ThreadFactory 和 Callable 类的工厂和实用方法. Executors只是一个工厂类,它所有的方法返回的都是ThreadPoolExecutor.Sche

线程同步&amp;线程池

线程同步&线程池 线程同步 线程不同步会出现的问题: 当多个线程操作同一资源时,会出现重复操作和和操作不存在的资源的问题,为了规避这一问题就需要线程的同步操作来实现资源的共同使用. 线程同步: 当多个线程操作同一资源时,给操作该资源的代码加上一把锁,当有一个线程拿到这把锁后,其他线程都不能操作带锁的资源代码,直至拿到锁的线程释放锁. 线程同步实现的3种方式: 同步代码块 synchornized(obj){ //涉及操作同一资源的代码 } 注: 没有静态的同步代码块 obj: 任意类型的对象,相

基础学习day11--多线程一线程的创建,运行,同步和锁

1.1.进程和线程 进程:一个应用程序一般都是一个进程,正在进行的程序 每一个进程最少都有一个线程,都有一个执行顺序,该顺序是一个执行路径或者一个控制单元 线程:进程中一个独立的控制单元,线程控制着进程的执行. windows中的任务管理器,可以查看进程,linux下通过ps命令 线程是进程的最小单位 线程依赖于进程 线程随着进程的创建和创建,随着进程的结束而消亡 如迅雷:可以同时开启多个下载,就是多线程 多个程序同时执行,时CPU在很快的切换,看上去是同时执行,实际上是在CPU在切换执行. 多