Java多线程的一些方法

首先介绍线程的五种状态:

新生态:New Thread()

就绪态:准备抢CPU时间片

运行态:抢到了CPU时间片

阻塞态:放弃已经抢到的CPU时间片,且暂时不参与争抢

死亡态:Run运行完了之后

接下来介绍三种方法:线程的阻塞,线程的优先级设置,线程的礼让

 1 public class MutliThreadDemo4 {
 2     public static void main(String[] args) {
 3         threadBlock();
 4         //threadPriority();
 5         //threadYield();
 6
 7     }
 8     /**
 9      * 线程的阻塞
10      */
11     private static void threadBlock() {
12         //创建Runnable接口实现类的对象
13         Runnable r = () -> {
14             for(int i = 0; i < 10; i++) {
15                 System.out.println(Thread.currentThread().getName() + ":" + i);
16                 //线程休眠(由运行状态到阻塞状态,时间过了回到就绪态,重新争抢),直观上表现为停顿打印
17                 try {
18                     Thread.sleep(1000);
19                 }catch(InterruptedException e){
20                     e.printStackTrace();
21                 }
22             }
23         };
24         //实例化
25         new Thread(r, "甲").start();
26     }
27
28     /**
29      * 线程的优先级
30      */
31     private static void threadPriority() {
32
33         Runnable r = () -> {
34             for(int i = 0; i < 10; i++) {
35                 System.out.println(Thread.currentThread().getName() + ":" + i);
36             }
37         };
38         Thread t1 = new Thread(r, "甲");
39         Thread t2 = new Thread(r, "乙");
40
41         //设置优先级,必须在开始执行(start)之前
42         //设置线程的优先级,只是修改这个线程可以去抢到CPU时间片的概率。
43         //并不是优先级高的线程一定能抢到CPU时间片
44         //优先级的设置,是一个整数(0,10]的整数,默认是5
45         t1.setPriority(10);
46         t2.setPriority(1);
47
48         t1.start();
49         t2.start();
50
51     }
52     /**
53      * 线程的礼让
54      */
55     private static void threadYield() {
56         //线程释放自己的CPU资源,由运行状态,回到就绪状态
57         //匿名内部类
58         Runnable r = new Runnable() {
59             public void run() {
60                 for (int i = 0; i < 10; i++) {
61                     System.out.println(Thread.currentThread().getName() + ":" + i);
62                     if (i == 3) {
63                         Thread.yield();
64                     }
65                 }
66             }
67         };
68         Thread thread1 = new Thread(r, "thread-1");
69         Thread thread2 = new Thread(r, "thread-2");
70
71         thread1.start();
72         thread2.start();
73     }
74 }

原文地址:https://www.cnblogs.com/ggrrbb/p/12289677.html

时间: 2024-08-30 01:44:32

Java多线程的一些方法的相关文章

Java多线程死锁避免方法

一.什么是死锁当两个或两个以上的线程在执行过程中,因为争夺资源而造成的一种相互等待的状态,由于存在一种环路的锁依赖关系而永远地等待下去,如果没有外部干涉,他们将永远等待下去,此时的这个状态称之为死锁.经典的 "哲学家进餐" 问题很好地描述了死锁状况:5个哲学家去吃中餐,坐在一张圆桌旁,他们有5根筷子(而不是5双),并且每两个人中间放一根筷子,哲学家们要么在思考,要么在进餐,每个人都需要一双筷子才能吃到东西,并在吃完后将筷子放回原处继续思考,有些筷子管理算法 (1) 能够使每个人都能相对

Java多线程同步的方法

一 synchronized关键字 1.synchronized实现原理: ---基于对象监视器(锁) java中所有对象都自动含有单一的锁,JVM负责跟踪对象被加锁的次数.如果一个对象被解锁,其计数变为0.在任务(线程)第一次给对象加锁的时候, 计数变为1.每当这个相同的任务(线程)在此对象上获得锁时,计数会递增.只有首先获得锁的任务(线程)才能继续获取该对象上的多个锁.每当任务离开时,计数递减,当计数为0的时候,锁被完全释放. Java中每个对象或者类都有一把锁与之相关联,对于对象来说,监视

java多线程的实现方法

java虚拟机允许应用程序并发地运行多个线程.在java语言中,多线程的实现一般有以下三种方法: 1)实现Runnable接口,并实现该接口的run()方法 class MyThread implements Runnable { public void run(){ System.out.println("Thread Body"); } } public class Test { public static void main(String[] args) { MyThread t

Java 多线程的实现方法

package com.jckb; /**多线程实现的两种方法 * * @author gx * */ public class Test2 { public static void main(String[] args) { Mythread m = new Mythread(); m.start();// 不能直接调用run方法 // m.run();//是方法调用,不是线程的启动 Thread t = new Thread(new Mythread2()); t.start(); } }

Java多线程之~~~~synchronized 方法

在多线程开发中,总会遇到多个在不同线程中的方法操作同一个数据,这样在不同线程中操作这个数据不同的顺序 或者时机会导致各种不同的现象发生,以至于不能实现你预期的效果,不能实现一致性,这时候就可以使用 synchronized关键字对一个方法来说,这个synchronized能保证所有调用这个方法的线程只有一个正在操作这个方法, 不会出现同时多个线程进入这个方法的情况,下面我们来一个例子说明这个情况. 首先是一个Account类,这个类模拟账户,提供增加工资和减少工资的方法,当然,这个方法是被syn

Java多线程的创建方法

Java 线程类也是一个 object 类,它的实例都继承自java.lang.Thread 或其子类. 可以用如下方式用 java 中创建一个线程,执行该线程可以调用该线程的 start()方法: Tread thread = new Thread(); thread.start(); 在上面的例子中,我们并没有为线程编写运行代码,因此调用该方法后线程就终止了. 编写线程运行时执行的代码有两种方式:一种是创建Thread 子类的一个实例并重写 run 方法,第二种是创建类的时候实现 Runna

Java多线程中join方法详解

join()方法用于让当前执行线程等待join线程执行结束.其实现原理是不停的检查join线程是否存活,如果join线程存活则让当前线程永远等待. join()方法部分实现细节 while(isAlive()) { wait(0) } 其中wait(0)表示永远等待下去. join线程中止后,线程的this.notifyAll()方法会被调用,调用notifyAll()是在JVM里调用的所有在JDK中看不到,大家可以看JVM源码 示例程序: public calss ThreadTest{ pu

java 多线程-常用其他方法

常用其他方法isAlive() 判断线程是否还活着,即是否终止setName() 给线程起名,代理角色getName() 获取线程名字 public class n { public static void main(String[]args) throws InterruptedException { System.out.println(Thread.currentThread().isAlive()); //设置名字,真实角色(面向对象方式设置)和代理角色(线程的默认名字0到10) tes

新兵日记--java多线程学习(一)  --如何创建线程

java 多线程的实现方法 可以通过继承Thread类和实现Runnable接口来实现,而Thread类实际上实现了Runnable接口 ,两种创建线程的方法性质是一样的,并没有什么本质区别 Thread类 1. 创建MyThread 类并继承Thread类 public class MyThread extends Thread{} 2. 在MyThread类中重写 Thread类的run()方法,值得一提的是Thread类的run()方法是实现了Runnable接口,所以继承Thread类和