Java中线程的使用 (2)-多线程、线程优先级、线程睡眠、让步、阻塞

(一)多线程使用方法

说明:创建每个新的线程,一定要记得启动每个新的线程(调用.start()方法)

class Xc3 extends Thread

{

public void run()

{

System.out.println( Thread.currentThread().getName()+"在执行");

}   //显示当前线程名称

}

public class L6_3

{

public static void main(String[] args)

{

Xc3 xc31=new Xc3();

xc31.setName("线程1");

xc31.start();

Xc3 xc32=new Xc3();

xc32.setName("线程2");

xc32.start();

Xc3 xc33=new Xc3();

xc33.setName("线程3");

xc33.start();

System.out.println( Thread.currentThread().getName()+"在执行");

}

}

(二)设置线程的优先级

说明:你想要提高优先级的线程调用setPriority方法即可,例如线程2 提高优先级的事例如下:xc2.setPriority(Thread.NORM_PRIORITY + 3);。3表示增加的优先级,数字越大,优先级越大。

public class L6_4 {

public static void main(String[] args)

{

Thread xc1 = new Thread(new Xc41());

Thread xc2 = new Thread(new Xc42());//线程默认级别是5

xc2.setPriority(Thread.NORM_PRIORITY + 3); //数字越大优先级越高

xc1.start();

xc2.start();

}

}

class Xc41 implements Runnable {

public void run() {

for(int i=0; i<100; i++) {

System.out.println("1线程" + i);

}

}

}

class Xc42 implements Runnable {

public void run() {

for(int i=0; i<100; i++) {

System.out.println("第2个线程正在被执行: " + i);

}

}

}

(三)线程睡眠

说明:3点

1. 想要线程睡眠直接调用sleep函数即可,这个sleep是个静态函数,所以可以用类名调用。2.本例的示例:Thread.sleep(1000); //1000毫秒等于1秒。其实也就这一句话。

3.后面的线程让步,线程阻塞,和开始的线程,其实也就是类似这样的一句话。

public class L6_5

{

public static void main(String[] args)

{

Xc5 xc5 = new Xc5();

Thread ccc = new Thread(xc5);

ccc.start();

}

}

class Xc5 implements Runnable

{

public void run() //throws Exception

{

for (int i=0; i<10; i++)

{

System.out.println(Thread.currentThread().getName() + "   " + i);

try

{

Thread.sleep(1000); //1000毫秒等于1秒

}

catch (Exception e)

{

}

}

}

}

(四)进程让步

说明:

  1. 核心代码:Thread.yield();

代码:

public class L6_6

{

public static void main(String[] args)

{

Xc6 xc6 = new Xc6();

Thread aa = new Thread(xc6);

Thread bb = new Thread(xc6);

aa.setName("线程一");

bb.setName("线程二");

aa.start();

bb.start();

}

}

class Xc6 implements Runnable

{

public void run()

{

for(int i=1;i<=30;i++)

{

System.out.println(Thread.currentThread().getName()+": "+i);

if(i%5==0)

{

Thread.yield();

}

}

}

}

运行结果:

线程一: 1

线程二: 1

线程一: 2

线程二: 2

线程一: 3

线程二: 3

线程一: 4

线程二: 4

线程一: 5

线程二: 5

线程一: 6

线程二: 6

线程一: 7

线程二: 7

线程一: 8

线程二: 8

线程一: 9

线程二: 9

线程一: 10

线程二: 10

线程二: 11

线程一: 11

线程二: 12

线程一: 12

线程二: 13

线程一: 13

线程二: 14

线程二: 15

线程一: 14

线程二: 16

线程一: 15

线程二: 17

线程一: 16

线程二: 18

线程一: 17

线程二: 19

线程二: 20

线程二: 21

线程二: 22

线程二: 23

线程二: 24

线程二: 25

线程二: 26

线程二: 27

线程二: 28

线程二: 29

线程二: 30

线程一: 18

线程一: 19

线程一: 20

线程一: 21

线程一: 22

线程一: 23

线程一: 24

线程一: 25

线程一: 26

线程一: 27

线程一: 28

线程一: 29

线程一: 30

结果说明:

在结果中可以发现线程一在5,10,15的时候都让给线程二执行了,20,25,30的时候无人可让,所以就接着自己执行。

(五)进程阻塞

说明:

  1. 阻塞时将当前线程暂停,直至调用join函数所对应的线程执行完毕,才继续执行程序。
  2. 核心代码:dd.join();//dd是线程名字

代码:

public class L6_7

{

public static void main(String args[])

{

Xc7 xc7=new Xc7();

Thread dd = new Thread(xc7);

dd.start();

try{

dd.join(); //阻塞时将当前线程暂停,直至调用join函数所对应的线程执行完毕,才继续执行程序。

}

catch(Exception e)

{

}

for(int i=0;i<15;i++){

System.out.println("主线程:" + i);

}

}

}

class Xc7 implements Runnable {

public void run() {

for(int i=0;i<10;i++) {

System.out.println("子线程: " + i);

}

}

}

结果:

子线程: 0

子线程: 1

子线程: 2

子线程: 3

子线程: 4

子线程: 5

子线程: 6

子线程: 7

子线程: 8

子线程: 9

主线程:0

主线程:1

主线程:2

主线程:3

主线程:4

主线程:5

主线程:6

主线程:7

主线程:8

主线程:9

主线程:10

主线程:11

主线程:12

主线程:13

主线程:14

结果说明:

子线程执行完了才是主线程。

Java中线程的使用 (2)-多线程、线程优先级、线程睡眠、让步、阻塞的更多相关文章

  1. Java中各种集合(字符串类)的线程安全性!!!

    Java中各种集合(字符串类)的线程安全性!!! 一.概念: 线程安全:就是当多线程访问时,采用了加锁的机制:即当一个线程访问该类的某个数据时,会对这个数据进行保护,其他线程不能对其访问,直到该线程读 ...

  2. java中的IO流和多线程

    1.如何用file操作目录和文件? java对待目录和文件统一使用file来表示,在创建file对象时,使用isDictionary和isFile方法进行判断 package test; import ...

  3. java中最简单的方式新起一个线程

    启动一个线程在一个方法中启动一个线程,有两种方法第一种是让类实现Runable接口,这样的话编译器就会提示你实现里面的未实现的方法(就是run方法)第二种是,现在方法中new一个线程,然后直接调用他的 ...

  4. java中那些类是线程安全的?

    Java中各种集合(字符串类)的线程安全性!!! 一.概念: 线程安全:就是当多线程访问时,采用了加锁的机制:即当一个线程访问该类的某个数据时,会对这个数据进行保护,其他线程不能对其访问,直到该线程读 ...

  5. java多线程同步以及线程间通信详解&消费者生产者模式&死锁&Thread.join()(多线程编程之二)

    本篇我们将讨论以下知识点: 1.线程同步问题的产生 什么是线程同步问题,我们先来看一段卖票系统的代码,然后再分析这个问题: package com.zejian.test; /** * @author ...

  6. java之线程(线程的创建方式、java中的Thread类、线程的同步、线程的生命周期、线程之间的通信)

    CPU:10核 主频100MHz 1核  主频    3GHz 那么哪一个CPU比较好呢? CPU核不是越多越好吗?并不一定.主频用于衡量GPU处理速度的快慢,举个例子10头牛运送货物快还是1架飞机运 ...

  7. Python中的多线程编程,线程安全与锁(二)

    在我的上篇博文Python中的多线程编程,线程安全与锁(一)中,我们熟悉了多线程编程与线程安全相关重要概念, Threading.Lock实现互斥锁的简单示例,两种死锁(迭代死锁和互相等待死锁)情况及 ...

  8. 【万字图文-原创】 | 学会Java中的线程池,这一篇也许就够了!

    碎碎念 关于JDK源码相关的文章这已经是第四篇了,原创不易,粉丝从几十人到昨天的666人,真的很感谢之前帮我转发文章的一些朋友们. 从16年开始写技术文章,到现在博客园已经发表了222篇文章,大多数都 ...

  9. Java中线程的状态及其转化

    线程状态转化图: 说明: 线程总共包括以下5种状态. 1.新状态New:该状态也叫新建状态,当线程对象被创建后,线程就进入了新建状态.例如:Thread thread = new Thread();. ...

  10. 【Java_多线程并发编程】基础篇—线程状态及实现多线程的两种方式

    1.Java多线程的概念 同一时间段内,位于同一处理器上多个已开启但未执行完毕的线程叫做多线程.他们通过轮寻获得CPU处理时间,从而在宏观上构成一种同时在执行的假象,实质上在任意时刻只有一个线程获得C ...

随机推荐

  1. icheck样式绑定与翻页保持

    官方文档:http://icheck.fronteed.com/ 使用基本样式 $('input').iCheck({ checkboxClass : 'icheckbox_square-blue', ...

  2. 想系统的学习一下项目管理,推荐PRINCE2

    参加pmp培训,考个pmp证书就足矣应付面试. 个人并不推荐看那些外文原版书籍,我看过一两本,水平与实用性并不是你想象的那么好,除非你是做理论研究,为了发表论文. 另一本就推荐prince2的教材,p ...

  3. Lvs工作原理

    DR模式的工作过程: 当一个client发送一个WEB请求到VIP,LVS服务器根据VIP选择对应的real-server的Pool,根据算法,在Pool中选择一台Real-server,LVS在ha ...

  4. smokeping安装部署最佳实践

    1.1安装smokeping [root@linux-node2 ~]# cat /etc/redhat-release              #查看服务器信息 CentOS release 6. ...

  5. CSS盒模型和文本溢出

    CSS盒模型和文本溢出 学习目标 认识盒子模型 盒子模型的组成部分 学习盒子模型的相关元素margin padding 文本溢出相关的属性 一.认识盒子模型 盒模型是css布局的基石,它规定了网页元素 ...

  6. LoonAndroid自动检测输入框 --- Author: rose && lvyerose@163.com

    LoonAndroid框架,同时给我们提供了一套自动检测输入规则的工具,用起来很是方便,下面介绍一下这个东东的使用方法(注意,该说明是基于项目已经集成了LoonAndroid框架而言,如果您未集成该框 ...

  7. 【Android】基于TCP协议的网络通信

    1.使用ServerSocket 创建TCP服务器端: ServerSocket server; try { server = new ServerSocket(8000); while (true) ...

  8. macOS平台下虚拟摄像头的研发总结

    一.背景介绍 虚拟摄像头,顾名思义,就是利用软件技术虚拟出一个摄像头硬件设备供用户使用.当我们需要对视频图像进行处理再输出时,虚拟摄像头就具备非常大的价值了.关于如何在Windwos上实现一个虚拟设备 ...

  9. Android常用adb命令

    1.进入手机命令行模式 adb shell 有多部手机的话 adb -s + 手机编号 + shell 2.安装apk adb install 然后将apk文件拖进命令行 卸载apk adb unin ...

  10. HBase应用快速学习

    HBase是一个高性能.面向列.可伸缩的开源分布式NoSQL数据库,是Google Bigtable的开源实现. HBase的思想和应用和传统的RDBMS,NoSQL等有比较大的区别,这篇文章从HBa ...