有如下线程类定义:

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多线程小题一瞥的更多相关文章

  1. java多线程编程题之连续打印abc的几种解法

    一道编程题如下: 实例化三个线程,一个线程打印a,一个打印b,一个打印c,三个线程同时执行,要求打印出6个连着的abc 题目分析: 通过题意我们可以得出,本题需要我们使用三个线程,三个线程分别会打印6 ...

  2. Java多线程小总结

    多线程 线程与进程 线程:具有完成特定任务的一条执行路径,是CPU执行的最小单位 进程:正在执行的程序 重点:CPU在某个时间刻度上只能够执行一条原子性语句 字节最小是bit位 原子性语句:不能够再次 ...

  3. Java——多线程小例子

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  4. 学习练习 java练习小题题目:判断一个整数能被几个9整除

    题目:判断一个整数能被几个9整除 package com.hanqi.lianxi; import java.io.*; public class Test1 { //判断能否被9整除 static ...

  5. Java练习小题_求一个3*3矩阵对角线元素之和,矩阵的数据用行的形式输入到计算机中 程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。

    要求说明: 题目:求一个3*3矩阵对角线元素之和,矩阵的数据用行的形式输入到计算机中 程序分析:利用双重for循环控制输入二维数组,再将 a[i][i] 累加后输出. 实现思路: [二维数组]相关知识 ...

  6. Java多线程小例子(三个窗口卖火车票)

    class Ticket implements Runnable{ private int TicketNum = 100; //100张火车票 private boolean flag = true ...

  7. Java练习小题_猴子吃桃问题分别用for循环和while循环实现程序。

    要求说明: 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第10天早上想再吃时, ...

  8. 关于Java多线程的线程同步和线程通信的一些小问题(顺便分享几篇高质量的博文)

    Java多线程的线程同步和线程通信的一些小问题(顺便分享几篇质量高的博文) 前言:在学习多线程时,遇到了一些问题,这里我将这些问题都分享出来,同时也分享了几篇其他博客主的博客,并且将我个人的理解也分享 ...

  9. Java多线程同步问题:一个小Demo完全搞懂

    版权声明:本文出自汪磊的博客,转载请务必注明出处. Java线程系列文章只是自己知识的总结梳理,都是最基础的玩意,已经掌握熟练的可以绕过. 一.一个简单的Demo引发的血案 关于线程同步问题我们从一个 ...

随机推荐

  1. 12.4 hdfs总结

    启动hdfs 需要在namenode 节点 上 s11 启动yarn 需要在resourceManager 节点上 namenode, resourceManager 都需要在整个集群中都是可以无密登 ...

  2. JavaScript中的Array类型详解

    与其他语言中的数组的区别: 1.JavaScript数组的每一项都可以保存任何类型的数据,一个数组的数组元素可以是不同类型的数据. 2.数组的大小是动态调整的,可以随着数据的添加自动的增长. 1.两种 ...

  3. vue $set的使用

    在我们使用vue进行开发的过程中,可能会遇到一种情况:当生成vue实例后,当再次给数据赋值时,有时候并不会自动更新到视图上去: 当我们去看vue文档的时候,会发现有这么一句话:如果在实例创建之后添加新 ...

  4. 用SignalTap进行硬件仿真

    写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...

  5. Delphi IdHTTP 设置cookie 和访问后读取Cookie 值

    procedure TForm1.btn1Click(Sender: TObject); var   IdHTTP: TIdHTTP;   mstrCookie: string;   Cookies ...

  6. 如何实现一个字符的反转 (Java)

    一..通过jdk自带reverse的方法.

  7. winform接收全局的快捷键

    public class NativeWIN32 { public NativeWIN32() { } /* ------- using WIN32 Windows API in a C# appli ...

  8. python基础数据类型考试题

    Python基础数据类型考试题 考试时间:两个半小时                      满分100分(80分以上包含80分及格) 一,基础题. 1,简述变量命名规范(3分) 2,字节和位的关系 ...

  9. Asp.net Mvc post表单提交多个实体模型

    上一遍说道用Tuple实现Asp.net Mvc action返回多个模型实体给view,此篇发过来,实现view表单提交多个实体模型到action. 1.view代码: @{ Layout = nu ...

  10. OC动画CABasicAnimation

    //1.创建动画 CABasicAnimation *anima=[CABasicAnimation animationWithKeyPath:@"bounds"]; //1.1设 ...