【Java】Java多线程的简单使用

本文深入探讨了Java中的线程实现与同步机制,包括使用Thread类与Runnable接口创建线程,以及如何通过synchronized关键字确保线程安全。同时,介绍了wait()与notify()方法在多线程环境中的应用。
import java.util.*;
public class ThreadsTest extends Thread{
    private String name;
    private int time;
    public ThreadsTest(int time,String name){
        this.time = time;
        this.name = name;
    }
    public void run() {
        while (true) {
            try {
                System.out.println(name+":"+Calendar.getInstance().getTime());
                Thread.sleep(time);
            }catch(InterruptedException e) {}
        }
    }
    public static void main(String[] args) {
        ThreadsTest fast = new ThreadsTest(1000,"Fast");
        ThreadsTest slow = new ThreadsTest(3000,"Slow");
        fast.start();
        slow.start();
    }
}

效果如图:

有临界资源,用synchronized修饰代码块或方法,可实现某一时刻只有一个线程拥有对象锁

以堆栈举例:

public class Stack{
    int idx = 0;
    char[] data = new char[10];
    public void push(char c) {
        synchronized (this) { //方法一,用在代码块
            data[idx] = c;
            idx++;
        }
    }
    public synchronized char pop() { //方法二,用在描述对象
        idx--;
        return data[idx];
    }
}

wait()方法和notify()方法,wait()方法使线程进入阻塞状态,释放占用的对象锁。notify()方法和notifyAll()方法,前者随机唤醒等待中的一个线程,后者使等待队列中的全部线程解除阻塞。

实现Runnable接口

class TimePrinter implements Runnable{
    //此处省略代码,只有构造对象时候不同
    public static void main(String[] args) {
        Thread fast = new Thread(new TimePrinter(1000,"Fast"));
        Thread slow = new Thread(new TimePrinter(1000,"slow"));
        fast.start();
        slow.start();
    }
}

 

转载于:https://www.cnblogs.com/to-red/p/9786659.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值