Java多线程入门Ⅱ
线程的让步
线程让出自己占用的CPU资源
- 线程让出资源,不指定让给谁
- 线程让出资源,指定让给谁
方法1:
public static void yield();
线程实现交替打印
import java.io.*;
import java.util.*;
class MyRunnable implements Runnable{
private String l;
private String r;
public MyRunnable(String fl,String fr) {
this.l=fl;this.r=fr;
}
public void run() {
for(int i=0;i<30;i++) {
System.out.print(l+" "+i+" "+r+" ");
Thread.yield();
}
}
}
public class Main {
public static void main(String[] args) {
MyRunnable mr1=new MyRunnable("[","]");
MyRunnable mr2=new MyRunnable("(",")");
Thread t1=new Thread(mr1);
Thread t2=new Thread(mr2);
t1.start();t2.start();
}
}
方法2:
public final void join() throws InterruptedException
public final void join(long millis) throws InterruptedException
public final void join(long millis,int nano) throws InterruptedException
将两个线程合并为同一个线程,A调用join B,A等到B结束再恢复执行
import java.io.*;
import java.util.*;
class MyRunnable implements Runnable{
private String l;
private String r;
public MyRunnable(String fl,String fr) {
this.l=fl;this.r=fr;
}
public void run() {
for(int i=0;i<30;i++) {
System.out.print(l+" "+i+" "+r+" ");
Thread.yield();
}
}
}
public class Main {
public static void main(String[] args) {
MyRunnable mr1=new MyRunnable("[","]");
Thread t1=new Thread(mr1);
t1.start();
for(int i=0;i<30;i++) {
if(i==10) {
try {
System.out.print("Join");
t1.join();
}catch(InterruptedException e) {
e.printStackTrace();
}
}
System.out.print("( "+i+" )");
}
}
}
方法3:
public final void setDaemon(boolean on) //将某个线程设置为守护线程
方法4:
public static void sleep(long millis)throws InterruptedExcepiton
线程同步
方法1:
synchronized 加锁
class Resources{
synchronized void function1(Thread currThread) {
for(int i=0;i<300;i++) {
System.out.println(currThread.getName());
}
}
}
class MyThread extends Thread{
Resources rs;
public MyThread(String tname,Resources trs) {
this.setName(tname);
this.rs=trs;
}
public void run() {
if(this.getName().equals("Thread1")) {
System.out.println("Thread1启动,等待进入function1");
rs.function1(this);
}else {
System.out.println("Thread2启动,等待进入function1");
rs.function1(this);
}
}
}
public class Main {
public static void main(String[] args) {
Resources rs=new Resources();
MyThread t1=new MyThread("Thread1",rs);
MyThread t2=new MyThread("Thread2",rs);
t1.start();t2.start();
}
}
方法2:
public final void wait() throws InterruptedException
public final void wait(long timeout) throws InterruptedException
public final void notify()
public final void notifyAll()
Java多线程入门Ⅱ的更多相关文章
- java多线程入门学习(一)
java多线程入门学习(一) 一.java多线程之前 进程:每一个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销.一个进程包括1--n个线程. 线程:同一类线程共享代码 ...
- Java多线程学习(一)Java多线程入门
转载请备注地址:https://blog.csdn.net/qq_34337272/article/details/79640870 系列文章传送门: Java多线程学习(一)Java多线程入门 Ja ...
- (转载)Java多线程入门理解
转载出处http://blog.csdn.net/evankaka 写在前面的话:此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能更 ...
- Java 多线程入门
进程与线程 在学习Java多线程之前,先简单复习一下进程与线程的知识. 进程:进程是系统进行资源分配和调度的基本单位,可以将进程理解为一个正在执行的程序,比如一款游戏. 线程:线程是程序执行的最小单位 ...
- java多线程入门
一.认识多任务.多进程.单线程.多线程 要认识多线程就要从操作系统的原理说起. 以前古老的DOS操作系统(V 6.22)是单任务的,还没有线程的概念,系统在每次只能做一件事情.比如你在copy东西 ...
- Java多线程入门知识点梳理
前言 在多核时代,高并发时代,对系统并行处理能力有很高要求.多线程就是这个时代最好的产物.通过使用多线程可以增强系统并行处理能力,提高CPU资源的有效利用:从而提高系统的处理能力.常见应用场景如:多窗 ...
- Java多线程入门及实战
基本概念: 1: 程序 2 进程 3 线程 4 进程和线程的区别 5 进程和程序的区别 Java实现多线程的方法: 1 继承Thread 2 实现Runable 3 实现callable 4 线程池的 ...
- Java多线程入门中几个常用的方法
一.currentThread()方法 currentThread方法就是返回当前被调用的线程. 该方法为一个本地方法,原码如下: /** * Returns a reference to the c ...
- Java多线程学习(四)等待/通知(wait/notify)机制
转载请备注地址:https://blog.csdn.net/qq_34337272/article/details/79690279 系列文章传送门: Java多线程学习(一)Java多线程入门 Ja ...
随机推荐
- Linux系统配置文件
ubuntu系统: ~/.bashrc:该文件保存终端的文本,颜色等各类设置 ~/.bash_history:保存用户运行过的命令 ~:表示home目录 /etc/matb:该文件保存所有挂载分区的文 ...
- html 文本溢出显示省略号 .....
- UvaLive6442(思维、结论)
结论是:按位置排序好以后,对于真正的答案,走法应该是:依次走向第0个等分点,第1个等分点……这样对于这种等分情况,是最优的调度. /* 先假设一个终点位置然后按位站好 这个位置不一定是最优所以要调 调 ...
- Histogram LightOJ - 1083
Histogram LightOJ - 1083 题意:给出一个直方图,由n个长条组成,它们的x轴上坐标分别为1-n,读入n之后读入的一行中,第i个表示x轴上坐标为i的长条长度.求直方图最大的正方形面 ...
- DFS水题 URAL 1152 False Mirrors
题目传送门 /* 题意:一个圈,每个点有怪兽,每一次射击能消灭它左右和自己,剩余的每只怪兽攻击 搜索水题:sum记录剩余的攻击总和,tot记录承受的伤害,当伤害超过ans时,结束,算是剪枝吧 回溯写挫 ...
- Eclipse的ant调用maven
需要在 eclipse 的 windows - preferences - ant - runtime - classpath - global entries 加入 eclipse 里面的 jsch ...
- 用户名密码登录小程序及input与raw_input区别。
一.此次程序需要实现: 1.设定固定的用户名密码 2.用户名密码输入正确打印登录正确信息 3.仅仅运行三次登录 二.本次使用的python版本为: Windows下版本号: C:\Users\dais ...
- poj2455Secret Milking Machine(二分+最大流)
链接 二分距离,小于当前距离的边容量+1,使最后流>=t 注意 会有重边 #include <iostream> #include<cstdio> #include< ...
- sql server的一个字符串分割的表值函数方法
ALTER function [dbo].[BOSplit](@SourceSql nvarchar(max), --要分割的字段@StrSeprate varchar(10) --分割符 ...
- Sublime折腾记录
本文可以理解为FAQ,主要是为了大家GET一些技能,具体内容包括LICENSE.重置.Package Control的安装,其他内容以后可能补充... 最后说明一下自己的版本:Build 3114 L ...