Table of Contents
You should pay attention to directly calling the service business class in the multi-threaded run method
The diagram is as follows
Four rejection strategies of thread pool
The difference between sleep and wait
Why wait(), notify(), notifyAll() are in the object and not in the Thread class
Home Java javaTutorial How to directly call service business class in Java multi-threaded run method

How to directly call service business class in Java multi-threaded run method

May 12, 2023 pm 02:22 PM
java run service

You should pay attention to directly calling the service business class in the multi-threaded run method

Using the service business class in the Java multi-threaded run method will cause a java.lang.NullPointerException exception. This is due to the business class injected by spring. is null, or the direct new business object is also null.

Multi-threading will prevent injection for thread safety. Therefore, when you want to use the service business class, you need to use the ApplicationContext method to obtain the bean method to obtain the service class.

To obtain the ApplicationContext class, you must implement the ApplicationContextAware interface, as follows:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

import org.springframework.beans.BeansException;

import org.springframework.context.ApplicationContext;

import org.springframework.context.ApplicationContextAware;

  

public class ApplicationContextUtil implements ApplicationContextAware {

  

    private static ApplicationContext context;

    public void setApplicationContext(ApplicationContext context) throws BeansException {

        this.context = context;

    }

    public static ApplicationContext getContext() {

        return context;

    }

}

Copy after login

Then use the above method in the run method to create a business object, as follows:

1

XXXServiceI xxxService = ApplicationContextUtil.getContext.getBean(XXXServiceI.class);

Copy after login

This way it can be used normally The business class is over.

The diagram is as follows

How to directly call service business class in Java multi-threaded run method

How to directly call service business class in Java multi-threaded run method

How to directly call service business class in Java multi-threaded run method

#Multi-threading knowledge points

Four ways to start threads

1. Inherit the Thread class and rewrite the run method of Thread, perform operations in the run method, and use the start method to start the thread

How to directly call service business class in Java multi-threaded run method

2. Inherit the Runnable interface, implement the run method, and perform operations in the run method. You need to pass in the instance object of the current class to create a Thread instance, and then call the start method to start the thread

How to directly call service business class in Java multi-threaded run method

3. Implement the Callable interface and rewrite the call() method. It should be noted that the first two methods do not require a response and are executed directly. However, if you implement the Callable interface and rewrite the call() method, You need to wait for the thread to respond, so although other threads are started, one thread is executing, and it cannot be considered a standard multi-thread.

How to directly call service business class in Java multi-threaded run method

4. Thread pool

How to directly call service business class in Java multi-threaded run method

#Use @Aysnc annotation to implement multi-threading

The same class , method A refers to method B. Adding asynchronous @Async annotation to method B will not be effective

The added @Async method and the caller cannot be in the same class

The difference between user threads and daemon threads

Threads created in Java default to creating user threads, such as new Thread (thread object).start

1

2

3

4

Thread thread = new Thread();

// 默认为false,都是用户线程

thread.setDaemon(true); // 表示设置为守护线程

thread.setDaemon(false); // 表示设置为用户线程

Copy after login

  • User thread: No It dies as other threads die. There are only two situations where it dies. One is that it terminates due to an exception during operation, and the other is that the program is executed normally and the thread dies

  • Daemon thread: Dies as the user thread dies. When the user thread dies, the daemon thread also dies, such as the gc garbage collection thread. If the user thread exists, then gc needs to be alive, otherwise it will be useless.

Six states of threads

1. New: Initial state, the thread is created, start() is not called

2. Runnable: Run Status, Java threads call the two states of ready and running in the operating system "running"

3. Blocked: blocked, the thread enters the waiting state, and the thread gives up the use of the CPU for some reason

  • Several situations of blocking:

  • A. Waiting for blocking: The running thread executes wait(), and the JVM will Put it in the waiting queue

  • B. Synchronous blocking: When the running thread acquires the synchronization lock of the object, if the synchronization lock is occupied by other threads, the JVM will put the current thread into the lock Pool

  • C. Other blocking: When the running thread executes sleep(), join() or issues an IO request, the JVM will set the current thread to the blocking state. When sleep() After execution, the join() thread terminates, and the thread resumes again after IO processing

4. Waiting: waiting state

5. timed_waiting: timeout waiting state, automatically after timeout Return

6. terminated: Termination status, the current thread has completed execution

Reentrancy of Java lock

The reentrancy mechanism of Java lock can solve the following problem , go directly to the code:

1

2

3

4

5

6

7

8

public class Demo1 {

   public synchronized void functionA(){

       System.out.println("iAmFunctionA");

       functionB();

   }

   public synchronized void functionB(){

       System.out.println("iAmFunctionB");

   }

Copy after login
Assume that Java does not provide a synchronized internal lock mechanism that forces atomicity: functionA() and functionB() are both synchronized methods. When the thread enters funcitonA(), it will obtain the object lock of this class. , this lock "new Demo1()" calls the method functionB() in functionA(), but functionB() is also synchronized, so the thread needs to obtain the object lock (new Demo1()) again, but the JVM will It is considered that this thread has acquired the lock of this object and cannot acquire it again, so it cannot call the functionB() method, causing a deadlock.

Four rejection strategies of thread pool

When the task cache queue of the thread pool is full and the number of threads in the thread pool reaches maximumPoolSize, if there are still tasks arriving, the task rejection strategy will be adopted. Usually there are The following four strategies:

ThreadPoolExecutor.AbortPolicy: Discard the task and throw RejectedExecutionException.

ThreadPoolExecutor.DiscardPolicy: Discard the task, but do not throw an exception.

ThreadPoolExecutor.DiscardOldestPolicy: Discard the frontmost task of the queue, and then resubmit the rejected task

ThreadPoolExecutor.CallerRunsPolicy: By the calling thread ( The thread that submitted the task) processes the task

The difference between sleep and wait

  • sleep is a method in the thread, but wait is a method in Object

  • The sleep method will not release the lock, but wait will release it and will be added to the waiting queue

  • sleep does not need to be awakened, but wait does

Why wait(), notify(), notifyAll() are in the object and not in the Thread class

The lock level in java is the object level instead of the thread level. Each object has a lock, which is obtained through the thread. If the wait() method is in a thread, it is not obvious which lock the thread is waiting for.

The above is the detailed content of How to directly call service business class in Java multi-threaded run method. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat Commands and How to Use Them
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Perfect Number in Java Perfect Number in Java Aug 30, 2024 pm 04:28 PM

Guide to Perfect Number in Java. Here we discuss the Definition, How to check Perfect number in Java?, examples with code implementation.

Random Number Generator in Java Random Number Generator in Java Aug 30, 2024 pm 04:27 PM

Guide to Random Number Generator in Java. Here we discuss Functions in Java with examples and two different Generators with ther examples.

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

Guide to Weka in Java. Here we discuss the Introduction, how to use weka java, the type of platform, and advantages with examples.

Smith Number in Java Smith Number in Java Aug 30, 2024 pm 04:28 PM

Guide to Smith Number in Java. Here we discuss the Definition, How to check smith number in Java? example with code implementation.

Java Spring Interview Questions Java Spring Interview Questions Aug 30, 2024 pm 04:29 PM

In this article, we have kept the most asked Java Spring Interview Questions with their detailed answers. So that you can crack the interview.

Break or return from Java 8 stream forEach? Break or return from Java 8 stream forEach? Feb 07, 2025 pm 12:09 PM

Java 8 introduces the Stream API, providing a powerful and expressive way to process data collections. However, a common question when using Stream is: How to break or return from a forEach operation? Traditional loops allow for early interruption or return, but Stream's forEach method does not directly support this method. This article will explain the reasons and explore alternative methods for implementing premature termination in Stream processing systems. Further reading: Java Stream API improvements Understand Stream forEach The forEach method is a terminal operation that performs one operation on each element in the Stream. Its design intention is

TimeStamp to Date in Java TimeStamp to Date in Java Aug 30, 2024 pm 04:28 PM

Guide to TimeStamp to Date in Java. Here we also discuss the introduction and how to convert timestamp to date in java along with examples.

Java Program to Find the Volume of Capsule Java Program to Find the Volume of Capsule Feb 07, 2025 am 11:37 AM

Capsules are three-dimensional geometric figures, composed of a cylinder and a hemisphere at both ends. The volume of the capsule can be calculated by adding the volume of the cylinder and the volume of the hemisphere at both ends. This tutorial will discuss how to calculate the volume of a given capsule in Java using different methods. Capsule volume formula The formula for capsule volume is as follows: Capsule volume = Cylindrical volume Volume Two hemisphere volume in, r: The radius of the hemisphere. h: The height of the cylinder (excluding the hemisphere). Example 1 enter Radius = 5 units Height = 10 units Output Volume = 1570.8 cubic units explain Calculate volume using formula: Volume = π × r2 × h (4

See all articles