Java 中线程的使用

Java中常见的线程创建方法有4中:

集成Thread类

package org.eu.zhuiyue;

import java.util.concurrent.*;

/**
 * Hello world!
 *
 */
public class App 
{

    static class MyThread extends Thread {
        @Override
        public void run() {
            System.out.println("Hello World! method 1 Thread");
        }
    }

    
    public static void main( String[] args ) throws ExecutionException, InterruptedException {
        System.out.println( "method 1 继承 Thread 类: " );
        Thread thread = new MyThread();
        thread.start();
        
    }
}

实现Runnable接口

package org.eu.zhuiyue;

import java.util.concurrent.*;

/**
 * Hello world!
 *
 */
public class App 
{

    
    public static void main( String[] args ) throws ExecutionException, InterruptedException {

        System.out.println( "method 2 实现 Runnable Interface " );
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Hello World! method 2 Runnable Interface");
            }
        }).start();

        System.out.println( "method 2 lambda Runnable Interface " );

        new Thread(()->{
            System.out.println("Hello World!");
        }).start();

        
    }
}

实现Callable接口

package org.eu.zhuiyue;

import java.util.concurrent.*;

/**
 * Hello world!
 *
 */
public class App 
{


    static class MyCallable implements Callable<String>

    {
        @Override
        public String call() throws Exception {
            return "Hello World! Callable Interface";
        }
    }
    public static void main( String[] args ) throws ExecutionException, InterruptedException {
        
        System.out.println( "method 3 实现 Callable Interface 带返回值 " );

        MyCallable myCallable = new MyCallable();
        FutureTask<String> futureTask = new FutureTask<>(myCallable);
        Thread thread3 = new Thread(futureTask);
        thread3.start();
        String result = futureTask.get();
        System.out.println(result);

       
    }
}

使用线程池

package org.eu.zhuiyue;

import java.util.concurrent.*;

/**
 * Hello world!
 *
 */
public class App 
{

    
    public static void main( String[] args ) throws ExecutionException, InterruptedException {
        

        System.out.println("method 4 Executor");
        //实际项目中创建线程池,不可用该方法,默认实现是无界队列,有OOM风险;
        ExecutorService executorService = Executors.newFixedThreadPool(10);
        for (int i = 0; i < 10; i++) {
            executorService.execute(()->{
                System.out.println("Hello World! Executor");
            });
        }


        System.out.println("method 4 custom Executor");
        //正确使用线程池方法,使用有界队列
        int corePoolSize = Runtime.getRuntime().availableProcessors();
        int maximumPoolSize = 10;
        long keepAliveTime = 1000;
        TimeUnit unit = TimeUnit.MILLISECONDS;
        //有界队列
        BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(10);
        ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue);
        for (int i = 0; i < 10; i++) {
            executor.execute(()->{
                System.out.println("Hello World! custom Executor");
            });
        }
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java 的多线程可以通过创建 Thread 类的实例来实现。具体步骤如下: 1. 创建一个实现 Runnable 接口的类,该类实现 run() 方法。 ```java public class MyRunnable implements Runnable { public void run() { // 执行线程的操作 } } ``` 2. 创建一个 Thread 实例,并将实现了 Runnable 接口的类作为构造函数的参数。 ```java MyRunnable myRunnable = new MyRunnable(); Thread thread = new Thread(myRunnable); ``` 3. 启动线程。 ```java thread.start(); ``` 此外,还可以通过继承 Thread 类来实现多线程。具体步骤如下: 1. 创建一个继承自 Thread 类的类,重写 run() 方法。 ```java public class MyThread extends Thread { public void run() { // 执行线程的操作 } } ``` 2. 创建 MyThread 的实例。 ```java MyThread myThread = new MyThread(); ``` 3. 启动线程。 ```java myThread.start(); ``` 在多线程使用,需要注意线程安全的问题,比如共享变量的访问、同步操作等。可以使用 synchronized 关键字或者 Lock 接口来保证线程安全。 ### 回答2: 在Java,多线程使用是指程序同时运行多个线程,每个线程执行自己的任务。Java线程使用可以带来以下几点好处: 1. 提高程序的效率:多线程可以对多个任务进行并发处理,提高程序的运行效率。例如,可以将网络请求和UI界面分别放在两个不同的线程,这样即使网络请求比较耗时,UI界面也能进行响应,不会出现界面假死的情况。 2. 充分利用系统资源:多线程可以充分利用系统的处理器资源,提高系统的利用率。在多核处理器上运行多个线程,可以让每个核心都得到充分利用,提高系统的整体性能。 3. 实现异步编程:多线程可以实现异步编程,即一个线程执行后续操作,不需要等待另一个线程的完成。这样可以提高程序的响应速度。例如,可以使用线程来进行文件下载,下载过程可以同时进行其他操作。 4. 处理复杂的并发情况:在一些需要处理多个并发操作的场景,多线程可以提供更好的解决方案。例如,在并发访问共享资源的情况下,使用线程锁可以保证对共享资源的安全访问,避免数据冲突和一致性问题。 Java使用线程可以通过创建Thread类的实例或者实现Runnable接口来实现。通过继承Thread类来创建线程,需要重写run方法,在run方法定义线程要执行的任务。通过实现Runnable接口来创建线程,需要实现run方法,并将实现了Runnable接口的对象作为参数传递给Thread类的构造方法。 总之,Java线程使用使得程序可以同时执行多个任务,提高了程序的效率和用户体验,并且能够处理复杂的并发情况。但需要注意多线程的安全性和线程之间的协作,避免出现数据冲突和一致性问题。 ### 回答3: Java线程使用是指在一个程序同时执行多个任务或者同时处理多个请求。多线程可以提高程序的并发性和响应性,可以将耗时的操作和任务分配给不同的线程来执行,从而提高程序的运行效率。 在Java,多线程使用主要依靠Thread类或者实现Runnable接口来创建线程。可以通过继承Thread类创建一个线程类,并重写run方法,在run方法定义需要执行的任务;也可以实现Runnable接口,创建一个Runnable对象,然后将该对象作为参数传递给Thread类的构造方法,创建一个线程对象。 使用线程的好处是可以充分利用处理器的多核特性,同时进行多个任务,提高程序的运行效率。多线程还可以提高程序的响应性,当程序有耗时的操作时,可以将其放在一个独立的线程执行,防止主线程被阻塞,提高用户体验。 然而,多线程使用也存在一些问题。首先是线程安全问题,多个线程同时访问共享资源可能导致数据不一致或者数据损坏。为解决这个问题,可以使用同步机制,如synchronized关键字或Lock接口,保证在同一时间只有一个线程能够访问共享资源。其次,多线程的创建和销毁会消耗系统资源,如果线程数量过多,可能会影响系统性能。因此,在使用线程时应该合理控制线程的数量。另外,线程之间的协调和通信也是一个值得关注的问题,可以使用wait、notify、join等方法来实现线程间的协作。 总之,Java线程使用可以提高程序的并发性和响应性,但需要注意线程安全、资源消耗以及线程协调和通信等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值