zoukankan      html  css  js  c++  java
  • java多线程小题一瞥

    有如下线程类定义:

    public class MyThread extends Thread {
    
        private static int num = 0;
    
        public MyThread() {
            num++;
        }
    
        @Override
        public void run() {
            System.out.println("主动创建的第" + num + "个线程" + currentThread().getName());
        }
    
    }

    看如下方法的执行结果: 

        public static void main(String args[]) throws Exception {
    
            for (int i = 1; i <= 10; i++) {
                MyThread th = new MyThread();
                th.setName("thread_" + i);
                th.start();
            }
    
        }

     下面是结果:

    主动创建的第10个线程thread_1
    主动创建的第10个线程thread_3
    主动创建的第10个线程thread_2
    主动创建的第10个线程thread_5
    主动创建的第10个线程thread_7
    主动创建的第10个线程thread_9
    主动创建的第10个线程thread_6
    主动创建的第10个线程thread_8
    主动创建的第10个线程thread_4
    主动创建的第10个线程thread_10

    打印出来的num都是10,也许会出乎我们的意料。释义:Thread类的start()方法用来创建一个新线程来执行子任务, new MyThread()语句是在主线程执行的, 所以,自然是num会递增,直到loop结束,值为10。

    那么,改造一下main方法逻辑, 在循环里每个th.start()后面加上一句Thread.sleep,结果会有所不同。如果设定sleep的毫秒数比较大,那么会按我们期望的num递增来输出结果。这个值取决于主机的处理能力,如果太小,比如1ms,可能也会打印出重复的num。 释义:一个进程在运行态时调用sleep(),进入等待态,这时其他子线程开始执行。sleep详解可参见https://www.cnblogs.com/guodongli/archive/2011/04/07/2007721.html

    ▍|▍▍||▍| ▍|▍▍||▍| ▍|▍▍||▍|▍▍||▍| ▍|▍▍||▍| ▍|▍▍||▍|▍▍||▍| ▍|▍▍||▍| ▍|▍▍||▍|▍▍||▍| ▍|▍▍||▍| ▍|▍▍||

     

    附java多线程相关知识:

    线程与进程

    1 线程:进程中负责程序执行的执行单元
    线程本身依靠程序进行运行
    线程是程序中的顺序控制流,只能使用分配给程序的资源和环境
    2 进程:执行中的程序
    一个进程至少包含一个线程
    3 单线程:程序中只存在一个线程,实际上主方法就是一个主线程
    4 多线程:在一个程序中运行多个任务
    目的是更好地使用CPU资源

    在java中,有2种方式来创建线程执行子任务:
    1. 直接继承Thread类,调用start方法
    2. 实现Runnable接口来定义一个子任务,然后交由Thread去执行
     

    Thread和Runnable的区别:
    Runnable的中文意思是“任务”,顾名思义,通过实现Runnable接口可以定义一个子任务,然后将子任务交给Thread去执行。
     
    Thread类实现了Runnable接口
     
    Thread的start方法:创建一个新线程来执行子任务。
    new Thread(new Runnable() {
        public void run() {
            ... ...
        }
    }).start();

    start方法和run方法的区别:
    • start用来创建新线程来异步执行子任务
    • run只是一个普通的方法,调用run不会新建线程
  • 相关阅读:
    java 代码规范 sun 公司
    软引用、弱引用、虚引用
    socket
    httpURLConnection、URL、httpClient、httpPost、httpGet
    android service aidl 理解
    Python2.7-codecs
    Python2.7-textwrap
    Python2.7-StringIO和cStringIO
    Python2.7-difflib
    Python2.7-struct模块
  • 原文地址:https://www.cnblogs.com/buguge/p/8005932.html
Copyright © 2011-2022 走看看