JAVA 运行的最小单元是什么?
最近从PHP转到了JAVA。 但是一直迷惑一个问题。就是JAVA 为什么会有连接池这个概念呢?
PHP的运行方式是从脚本开始到脚本结束,脚本结束,对象自动就没了。java是如何运行的呢?java难道是不同线程调用的还是同一个对象,那不就乱了??不同用户来,怎么区别谁是谁的对象??我都搞晕了。现在我都不敢new 对象了。
回复内容:
最近从PHP转到了JAVA。 但是一直迷惑一个问题。就是JAVA 为什么会有连接池这个概念呢?
PHP的运行方式是从脚本开始到脚本结束,脚本结束,对象自动就没了。java是如何运行的呢?java难道是不同线程调用的还是同一个对象,那不就乱了??不同用户来,怎么区别谁是谁的对象??我都搞晕了。现在我都不敢new 对象了。
php和java都搞过,来帮楼主理理。
疑问兼推测:楼主是用php和java做web。
当然,这也不重要,不过如果都是做web可能由于进程和线程的区别,刚开始确实会混淆。
先说结论:java运行方式,自始至终都是main方法为入口,启动一个JVM进程。
1、如果楼主只是运行一个简单java脚本,跟其他语言一样,都是main方法运行->结束,对象都销毁。
2、如果是运行一个web,那我用tomcat+servlet的方式来解释和php+cgi的不一样:
(1)对于一个web程序(用tomcat),java运行开始就是从tomcat启动的jvm,这个时候就是一个进程在运行,所有对象都在这个进程中。
(2)当一个http请求过来,tomcat有专门一个对象会去接收请求之后会创建一个线程去加载对应的servlet或者jsp页面(它类似php),然后去执行和响应。
区别就是这里,php通过webserver+cgi是去启动一个进程执行php脚本直到运行结束,那么这次请求是没有任何对象还或者了。
但是java,由于tomcat一直没有关闭,所以整个进程是一直存活着。你访问一个jsp,如果它有全局变量,那么即便jsp脚本执行完响应结束,全局变量还是会留在tomcat这个启动的这个jvm内存中。
不知道楼主看得明白不。。
“java难道是不同线程调用的还是同一个对象,那不就乱了?”
关于这个疑问。就像我上面提到的那个专门对象是一样的。由它接收到个请求,然后再给每个请求分配一个线程去处理。
在并发的情况下,这个对象完全可能被多个线程在同时使用。 那为什么可以是同一个对象处理,就是线程安全这块了,这个你可以看@捏造的信仰 的解答,写得很清楚,但你要了解多线程。
我只针对多线程方面的东西解释下。首先楼主可能需要理解,在 Java 中,什么样的对象是可以多个线程共享的,什么样的对象是不可以的。这个标准取决于对象的成员是否可以在线程之间共享。比如
<code>public class A { public int value; } </code>
显然,如果多个线程同时访问同一个 A 对象,就会有危险,因为它们会把 value 的值给“搞乱了”。而 A 类也被称为非线程安全的。不过,如果我改成这样:
<code>public class A { private int value; // 1 public A(int value) {this.value = value;} // 2 public int getValue() {return this.value;} // 3 } </code>
这样 A 就变成线程安全的了,为什么呢,因为它的成员 value 在(1)处变成私有的了,而且只能在构造函数(2)中赋值,且一旦赋值就只能读取(3),而读取是可以多个线程同时操作的。
所以,一个简单的原则就是,一个可赋值的成员会成为多线程中的隐患。如果一个类包含可赋值的成员,那么这个类的对象应该在线程当中独立存在,而不应该共享给多个线程同时访问,除非保证只有一个线程会去写。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Was sind die magischen Methoden von PHP? Zu den magischen Methoden von PHP gehören: 1. \ _ \ _ Konstrukt, verwendet, um Objekte zu initialisieren; 2. \ _ \ _ Destruct, verwendet zur Reinigung von Ressourcen; 3. \ _ \ _ Call, behandeln Sie nicht existierende Methodenaufrufe; 4. \ _ \ _ GET, Implementieren Sie den dynamischen Attributzugriff; 5. \ _ \ _ Setzen Sie dynamische Attributeinstellungen. Diese Methoden werden in bestimmten Situationen automatisch aufgerufen, wodurch die Code -Flexibilität und -Effizienz verbessert werden.

In PHP8 sind Übereinstimmungsausdrücke eine neue Kontrollstruktur, die unterschiedliche Ergebnisse basierend auf dem Wert des Expression zurückgibt. 1) Es ähnelt einer Switch -Anweisung, gibt jedoch einen Wert anstelle eines Ausführungsanweisungsblocks zurück. 2) Der Match -Ausdruck wird streng verglichen (===), was die Sicherheit verbessert. 3) Es vermeidet mögliche Auslassungen in Switch -Anweisungen und verbessert die Einfachheit und Lesbarkeit des Codes.

Kapseln sind dreidimensionale geometrische Figuren, die aus einem Zylinder und einer Hemisphäre an beiden Enden bestehen. Das Volumen der Kapsel kann berechnet werden, indem das Volumen des Zylinders und das Volumen der Hemisphäre an beiden Enden hinzugefügt werden. In diesem Tutorial wird erörtert, wie das Volumen einer bestimmten Kapsel in Java mit verschiedenen Methoden berechnet wird. Kapselvolumenformel Die Formel für das Kapselvolumen lautet wie folgt: Kapselvolumen = zylindrisches Volumenvolumen Zwei Hemisphäre Volumen In, R: Der Radius der Hemisphäre. H: Die Höhe des Zylinders (ohne die Hemisphäre). Beispiel 1 eingeben Radius = 5 Einheiten Höhe = 10 Einheiten Ausgabe Volumen = 1570,8 Kubikeinheiten erklären Berechnen Sie das Volumen mithilfe der Formel: Volumen = π × R2 × H (4
