jdk线程机制和代码示例

26 篇文章 0 订阅
7 篇文章 0 订阅

Java Development Kit (JDK) 中的线程机制是基于 Java 的 Thread 类和 Runnable 接口的。Java 线程机制允许程序同时执行多个操作,这对于提高应用程序的响应性和性能非常有用。下面是一些关于 JDK 线程机制的关键点和代码示例:

关键点

Thread 类和 Runnable 接口:Java 提供了 Thread 类来创建线程,同时也提供了 Runnable 接口作为创建线程的另一种方式。

线程的生命周期:线程有特定的生命周期,包括新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、等待(Waiting)、超时等待(Timed Waiting)和终止(Terminated)状态。

线程同步:为了避免多线程访问共享资源时的冲突,Java 提供了同步机制,如 synchronized 关键字和 Lock 接口。

线程通信:线程之间可以通过 wait(), notify() 和 notifyAll() 方法进行通信。

代码示例

以下是一个简单的 Java 线程示例,展示了如何使用 Thread 类和 Runnable 接口来创建和启动线程:

// 使用 Thread 类

class MyThread extends Thread {

    public void run() {

        for (int i = 0; i < 10; i++) {

            System.out.println(Thread.currentThread().getId() + " Value " + i);

        }

    }

}


// 实现 Runnable 接口

class MyRunnable implements Runnable {

    public void run() {

        for (int i = 0; i < 10; i++) {

            System.out.println(Thread.currentThread().getId() + " Value " + i);

        }

    }

}


public class ThreadExample {

    public static void main(String args[]) {

        MyThread t1 = new MyThread();

        t1.start();

        MyRunnable r1 = new MyRunnable();

        Thread t2 = new Thread(r1);

        t2.start();

    }

}

}

在这个示例中,MyThread 类继承自 Thread 类,而 MyRunnable 类实现了 Runnable 接口。在 main 方法中,我们创建了两个线程 t1 和 t2,并分别启动它们。每个线程都会在控制台上打印 0 到 9 的数字。

这个示例简单展示了如何创建和启动线程,但在实际应用中,线程管理可能涉及到更复杂的同步、通信和资源管理问题。


线程同步是处理多线程环境中共享资源访问的一种机制。在 Java 中,线程同步可以通过使用 synchronized 关键字来实现,它可以同步方法或代码块。以下是一个线程同步的示例,演示了如何使用 synchronized 来避免并发访问共享资源时可能出现的竞态条件。

示例:银行账户的线程同步

假设有一个银行账户类 BankAccount,多个线程可以同时尝试对这个账户进行存款和取款操作。为了确保账户余额的准确性,我们需要对存款和取款操作进行同步。

public class BankAccount {

    private double balance;

    public BankAccount(double initialBalance) {

        this.balance = initialBalance;

    }

    // 同步存款方法

    public synchronized void deposit(double amount) {

        balance += amount;

        System.out.println(Thread.currentThread().getName() + " deposited " + amount + ". New balance: " + balance);

    }

    // 同步取款方法

    public synchronized void withdraw(double amount) {

        if (balance >= amount) {

            balance -= amount;

   System.out.println(Thread.currentThread().getName() + " withdrew " + amount + ". New balance: " + balance);

        } else {

            System.out.println("Not enough money for " + Thread.currentThread().getName() + " to withdraw " + amount);

        }

    }

}

public class SynchronizationExample {

    public static void main(String[] args) {

        BankAccount account = new BankAccount(1000.00);

        // 创建两个线程,模拟同时进行的存款和取款操作

        Thread t1 = new Thread(new DepositTask(account), "Depositor1");

        Thread t2 = new Thread(new WithdrawTask(account), "Withdrawer1");

        t1.start();

        t2.start();

    }

}

class DepositTask implements Runnable {

    private BankAccount account;

    public DepositTask(BankAccount account) {

        this.account = account;

    }

    public void run() {

        for (int i = 0; i < 5; i++) {

            account.deposit(100);

            try {

                Thread.sleep(100); // 让线程暂停一会儿,增加并发冲突的可能性

            } catch (InterruptedException ex) {

                ex.printStackTrace();

            }

        }

    }

}



class WithdrawTask implements Runnable {

    private BankAccount account;



    public WithdrawTask(BankAccount account) {

        this.account = account;

    }



    public void run() {

        for (int i = 0; i < 5; i++) {

            account.withdraw(100);

            try {

                Thread.sleep(100); // 让线程暂停一会儿,增加并发冲突的可能性

            } catch (InterruptedException ex) {

                ex.printStackTrace();

            }

        }

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值