有如下线程类定义:

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. Impala2.7.0-cdh5.x.x安装部署

    部署impala impala安装选择rpm包方式进行,这是本次部署唯一一个主要主件采用rpm方式进行安装部署,这里主要原因是cloudera没有提供现成的tar包文件,而源码编译过程会出现各种未知原 ...

  2. 查询自己的apple购买历史

    https://secure1.store.apple.com/cn/order/list

  3. [administrative][archlinux][clonezilla][disk cloning] 一块 windows 10 硬盘的备份

    https://wiki.archlinux.org/index.php/disk_cloning https://wiki.archlinux.org/index.php/full_system_b ...

  4. delphi加载ADOQUERY

    CxgridDBTableView3.ClearItems;//这里是cxgrid的表层,先清除之前的列再创建  for I:=0 to adoquery1.FieldCount-1 do  begi ...

  5. crm项目整理

    crm项目整理   一.开发背景 由于公司人员的增多,原来通过excel表格存取方式过于繁琐,而且对于公司人员的调配和绩效考核等不能做到精确处理,所以开发crm系统,开始开发只是针对销售人员和客户,后 ...

  6. LeetCode 762 Prime Number of Set Bits in Binary Representation 解题报告

    题目要求 Given two integers L and R, find the count of numbers in the range [L, R] (inclusive) having a ...

  7. webpack打包配置模板

    /** * Created by zzq on 2017/3/26. *///__dirname是node.js中的一个全局变量,它指向当前执行脚本所在的目录module.exports = {//注 ...

  8. 【PyQt5-Qt Designer】QLineEdit 文本输入

    QLineEdit 文本输入 一.QlineEdit 基本方法 setAlignment() 按固定值方式对齐文本 Qt.AlignLeft:水平方向靠左对齐 Qt.AlignRight:水平方向靠右 ...

  9. B+树vs. LSM树(转)

    原文:<大型网站技术架构:核心原理与案例分析>,作者:李智慧 本书前面提到,由于传统的机械磁盘具有快速顺序读写.慢速随机读写的访问特性,这个特性对磁盘存储结构和算法的选择影响甚大. 为了改 ...

  10. Asp.net中"正在中止线程"错误解决方法

    项目中出现“正在中止线程”问题,百度后台发现,都是因为用到Response.End.Response.Redirect 或 Server.Transfer 方法. 原因: Response.End 方 ...