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 ...
随机推荐
- POJ 2104 K-th Number && 洛谷 P3834 【模板】可持久化线段树 1(主席树)
我惊奇的发现这两道题一模一样 题目背景 这是个非常经典的主席树入门题——静态区间第K小 数据已经过加强,请使用主席树.同时请注意常数优化 题目描述 如题,给定N个整数构成的序列,将对于指定的闭区间查询 ...
- safari 日期显示NAN
解决方案: 1.服务器端将时间转换为时间戳,前端再进行处理,问题解决. fastjson,JSON.toJSONString() 自动将时间字段转换为时间戳类型,然后传到前端. @RequestMap ...
- normal曲线绘制
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q ...
- Hadoop工作流不足(六)
不多说,直接上干货! 为此,需要第三方框架.如Azkaban或Oozie! Azkaban https://azkaban.github.io/ 具体,见我的博客,Azkaban概念学习系列.http ...
- 浅析 Spark Shuffle 内存使用
在使用 Spark 进行计算时,我们经常会碰到作业 (Job) Out Of Memory(OOM) 的情况,而且很大一部分情况是发生在 Shuffle 阶段.那么在 Spark Shuffle 中具 ...
- P1320 压缩技术(续集版)
题目描述 设某汉字由N X N的0和1的点阵图案组成,如下图.我们依照以下规则生成压缩码.连续一组数值:从汉字点阵图案的第一行第一个符号开始计算,按书写顺序从上到下,由左到右.第一个数表示连续有几个0 ...
- SQL系列函数——字符串函数
1.charindex函数用来寻找一个指定的字符(串)在另一个字符串中的起始位置,返回一个整数,没找到就返回0. select CHARINDEX('SQL','Microsoft SQL SERVE ...
- 使用css3 制作switch开关
使用css3来实现switch开关的效果: html代码: <!--switch开关--><div class="switch-btn"> <inpu ...
- TextView、EditText
1.TextView 显示文本信息 常用属性: layout_width/height 控件的宽/高 width/heigth 文本区域的宽/高 text 显示的文本 textSi ...
- CF758C Unfair Poll
题意: On the Literature lesson Sergei noticed an awful injustice, it seems that some students are aske ...