博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java多线程入门Ⅱ
阅读量:5846 次
发布时间:2019-06-18

本文共 2966 字,大约阅读时间需要 9 分钟。

线程的让步

线程让出自己占用的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 InterruptedExceptionpublic final void wait(long timeout) throws InterruptedExceptionpublic final void notify()public final void notifyAll()

转载于:https://www.cnblogs.com/zsyacm666666/p/7640454.html

你可能感兴趣的文章
Python+sklearn使用线性回归算法预测儿童身高
查看>>
记一次与自动论坛发帖机的斗争
查看>>
Linux shell 编程-关于16进制
查看>>
Hello! RenderScript
查看>>
java集合框架印象
查看>>
poj(2406)(kmp)
查看>>
恢复Reflector反编译后资源文件的办法
查看>>
HandlerExceptionResolver异常解析器家族揭秘
查看>>
Red Hat Linux4.0下主DNS服务器的搭建
查看>>
https/443安装
查看>>
Web服务器压力测试工具http_load、webbench、ab、Siege使用教程
查看>>
我的友情链接
查看>>
Delphi 正则表达式之TPerlRegEx 类的属性与方法(5): Compile、Study
查看>>
RHEL6.3 源码安装Puppet
查看>>
RSAT for Windows10
查看>>
我的友情链接
查看>>
mybatis 和 hibernate 区别?
查看>>
关于线程耗尽导致请求超时系统假死的思考
查看>>
初级文件系统管理之一
查看>>
Mac软件下载备忘
查看>>