线程运行

丁泽锋 发布于 05/24 15:34
阅读 166
收藏 0

class MyTask implements Runnable{
    private  int num=20;
    @Override
    public void run() {
        try {
            num--;
            System.out.println("num---------->"+num);
        } catch (Exception e) {
            
        }
    }
}

这个是线程。

public static void main(String[] args) throws Exception{
        MyTask task=new MyTask();
        for(int i=0;i<20;i++){
            Thread t=new Thread(task);
            t.start();
        }
    }

运行结果,每次都是  num---->0

试验过很多次,顺序也是19--18--17--16这样。

还是说我这个不算高并发?

 

 

 

 

加载中
1
风青山
风青山

没有涉及到变量共享,怎么会有问题。

 private  int num=20;

改成

 private static  int num=20;

 

0
一大口硫酸
一大口硫酸

亲亲,建议调大点哦

0
郭里奥

可能是因为你的操作太简单,等后面的线程启动了,前面的已经执行完了。

你可以多试试几次,就可能出来a

0
O
OSC_KqHJMh

原因1:线程的run()方法中执行太快了,每次下一个线程启动的时候上次的run方法已经执行完毕

原因2:线程数太少,加到百级别尝试一下

成功的话就会出现num输出乱序的情况

0
冷川
冷川

电脑性能太好了吧,run()里面随机sleep。

0
tcxu
tcxu
  1. 高并发 (High Concurrency):在极短单位时间内,极多个请求同时发起到服务器。
  2. 多线程是完成任务的一种方法,高并发是系统运行的一种状态,通过多线程有助于系统承受高并发状态的实现。
  3. “高并发和多线程”总是被一起提起,给人感觉两者好像相等,实则 高并发 ≠ 多线程
  4. 你这个不算高并发。


参考:
高并发是什么意思?
什么是多线程和高并发

 

0
前端大师傅
前端大师傅

原因很简单,就是System.out.println这个方法是线程安全的,也就是你打印出来的值是同步打印的,有一个线程 同步的过程。一定是不会出现所谓的不同序的问题。println函数的原码里很清楚:

synchronized (this) {...}//是包含在同步锁的。

所以楼主可以把基础的原码好好学习一下,这种是很基础的知识。

当然println并不会影响多线程中其它的代码只有打印输出是同步的,其它的代码不受synchronized影响。所以也不需要担心效率问题。

返回顶部
顶部