JavaRush /جاوا بلاگ /Random-SD /جاوا 8 خاصيتون - آخري گائيڊ (حصو 2)
0xFF
سطح
Донецк

جاوا 8 خاصيتون - آخري گائيڊ (حصو 2)

گروپ ۾ شايع ٿيل
مضمون جاوا 8 فيچرز جي ترجمي جو ٻيو حصو - الٽيميٽ گائيڊ . پهريون حصو هتي آهي (لنڪ تبديل ٿي سگهي ٿو). جاوا 8 خاصيتون - آخري گائيڊ (حصو 2) - 1

5. جاوا 8 لائبريرين ۾ نيون خاصيتون

جاوا 8 ڪيترائي نوان ڪلاس شامل ڪيا آھن ۽ موجوده ھڪڙي کي وڌايو آھي بھترين مدد لاءِ جديد اتفاق، فنڪشنل پروگرامنگ، تاريخ/وقت، ۽ وڌيڪ.

5.1. ڪلاس اختياري

مشهور NullPointerException جاوا ايپليڪيشن جي ناڪامي جو سڀ کان وڏو سبب آهي. گهڻو وقت اڳ، گوگل جي شاندار پروجيڪٽ GuavaOptional هڪ حل جي طور تي پيش ڪيو NullPointerException، جنهن سان ڪوڊ کي نال چيڪن جي آلودگي کان روڪيو ويو، ۽ نتيجي ۾ ڪلينر ڪوڊ لکڻ جي حوصله افزائي ڪئي وئي. گوگل کان متاثر ڪيل گووا ڪلاس Optionalهاڻي جاوا 8 جو حصو آهي. Optionalاهو صرف هڪ ڪنٽينر آهي: اهو هڪ قدر يا ڪجهه قسم تي مشتمل ٿي سگهي ٿو Т، يا صرف null ٿي سگهي ٿو. اهو ڪيترن ئي ڪارائتو طريقا مهيا ڪري ٿو ته جيئن واضح null چيڪ هاڻي جواز نه آهن. وڌيڪ تفصيلي ڄاڻ لاءِ سرڪاري دستاويز جو حوالو ڏيو . اچو ته ڏسو استعمال جا ٻه ننڍڙا مثال Optional: سان ۽ بغير null.
Optional<String> fullName = Optional.ofNullable( null );
System.out.println( "Full Name is set? " + fullName.isPresent() );
System.out.println( "Full Name: " + fullName.orElseGet( () -> "[none]" ) );
System.out.println( fullName.map( s -> "Hey " + s + "!" ).orElse( "Hey Stranger!" ) );
اهو طريقو صحيحisPresent() موٽائي ٿو جيڪڏهن مثال ۾ غير نال قيمت ۽ ٻي صورت ۾ غلط آهي . اهو طريقو نتيجو لاءِ هڪ فال بيڪ ميڪانيزم تي مشتمل آهي جيڪڏهن اهو null تي مشتمل آهي، ڊفالٽ قدر پيدا ڪرڻ لاءِ افعال قبول ڪرڻ. نقشو () طريقو موجوده قدر کي تبديل ڪري ٿو ۽ ھڪڙو نئون مثال ڏئي ٿو . طريقو ساڳيو آهي ، پر هڪ فنڪشن جي بدران اهو هڪ ڊفالٽ قدر وٺندو آهي. هتي هن پروگرام جي پيداوار آهي: OptionalorElseGet()OptionalOptionalOptionalorElse()orElseGet()
Full Name is set? false
Full Name: [none]
Hey Stranger!
اچو ته هڪ ٻئي مثال تي تڪڙو نظر وجهون:
Optional<String> firstName = Optional.of( "Tom" );
System.out.println( "First Name is set? " + firstName.isPresent() );
System.out.println( "First Name: " + firstName.orElseGet( () -> "[none]" ) );
System.out.println( firstName.map( s -> "Hey " + s + "!" ).orElse( "Hey Stranger!" ) );
System.out.println();
نتيجو هن طرح ٿيندو:
First Name is set? true
First Name: Tom
Hey Tom!
وڌيڪ تفصيلي معلومات لاء، مهرباني ڪري ڏسو سرڪاري دستاويز .

5.2. وهڪرو

نئون شامل ٿيل اسٽريم API ( java.util.stream) جاوا ۾ حقيقي فنڪشنل طرز پروگرامنگ متعارف ڪرايو. اهو جاوا لائبريري ۾ تمام گهڻي جامع اضافو آهي ۽ جاوا ڊولپرز کي خاص طور تي وڌيڪ ڪارائتو بڻائڻ جي اجازت ڏئي ٿو ۽ انهن کي موثر، صاف ۽ جامع ڪوڊ ٺاهڻ جي قابل بڻائي ٿو. وهڪرو API پروسيسنگ گڏ ڪرڻ کي تمام آسان بڻائي ٿو (پر انهن تائين محدود ناهي، جيئن اسان بعد ۾ ڏسنداسين). اچو ته هڪ سادي ڪلاس کي مثال طور وٺون Task.
public class Streams  {
    private enum Status {
        OPEN, CLOSED
    };

    private static final class Task {
        private final Status status;
        private final Integer points;

        Task( final Status status, final Integer points ) {
            this.status = status;
            this.points = points;
        }

        public Integer getPoints() {
            return points;
        }

        public Status getStatus() {
            return status;
        }

        @Override
        public String toString() {
            return String.format( "[%s, %d]", status, points );
        }
    }
}
ٽاسڪ ۾ ڪجهه نقطن جو احساس آهي (يا pseudo-مشڪلات) ۽ ٿي سگهي ٿو يا ته کليل يا بند . اچو ته هڪ ننڍڙو مجموعو متعارف ڪرايون مسئلن سان راند ڪرڻ لاء.
final Collection<Task> tasks = Arrays.asList(
    new Task( Status.OPEN, 5 ),
    new Task( Status.OPEN, 13 ),
    new Task( Status.CLOSED, 8 )
);
پهريون سوال جيڪو اسان اهو ڳولڻ چاهيون ٿا ته اوپن ٽاسڪ ۾ في الحال ڪيترا نقطا شامل آهن؟ Java 8 کان اڳ، ان لاءِ معمولي حل هوندو هو استعمال ڪرڻ لاءِ هڪ iterator foreach. پر جاوا 8 ۾، جواب آهي اسٽريمز: عناصر جو هڪ سلسلو جيڪو سپورٽ ڪري ٿو ترتيب وار ۽ متوازي مجموعي عملن کي.
// Подсчет общего количества очков всех активных задач с использованием sum()
final long totalPointsOfOpenTasks = tasks
    .stream()
    .filter( task -> task.getStatus() == Status.OPEN )
    .mapToInt( Task::getPoints )
    .sum();

System.out.println( "Total points: " + totalPointsOfOpenTasks );
۽ ڪنسول آئوٽ ان طرح نظر ايندو:
Total points: 18
اچو ته ڏسو ته هتي ڇا ٿي رهيو آهي. پهريون، ڪم گڏ ڪرڻ هڪ اسٽريمنگ نمائندگي ۾ تبديل ڪيو ويو آهي. آپريشن پوءِ filterفلٽر ڪري ٿو سڀني ڪمن کي بند حالت سان . ايندڙ قدم ۾، آپريشن هر مثال لاء هڪ طريقو استعمال ڪندي mapToIntstream Tasks کي اسٽريم ۾ تبديل ڪري ٿو . آخرڪار، سڀني نقطن کي استعمال ڪندي اختصار ڪيو ويو آهي طريقو ، جيڪو حتمي نتيجو مهيا ڪري ٿو. ايندڙ مثالن ڏانهن وڃڻ کان اڳ، ذهن ۾ رکڻ لاءِ ٿريڊن بابت ڪجهه نوٽس آهن (وڌيڪ تفصيل هتي ). آپريشن وچولي ۽ آخري آپريشن ۾ ورهايل آهن . وچولي آپريشن هڪ نئون وهڪرو موٽائي ٿو. اهي هميشه سست هوندا آهن؛ جڏهن وچولي عمل کي انجام ڏيندا آهن جيئن ته ، اهي اصل ۾ فلٽرنگ انجام نه ڏيندا آهن، پر ان جي بدران هڪ نئون وهڪرو ٺاهيندا آهن، جيڪو مڪمل ٿيڻ تي، اصل اسٽريم جا عنصر شامل آهن جيڪي ڏنل پيشڪش سان ملن ٿا. محدود آپريشن ، جهڙوڪ ۽ ، نتيجو يا ضمني اثر پيدا ڪرڻ لاء هڪ وهڪرو مان گذري سگهجي ٿو. هڪ دفعو حتمي آپريشن مڪمل ٿيڻ بعد، وهڪرو استعمال ڪيو ويندو آهي ۽ ٻيهر استعمال نه ٿي ڪري سگھجي. تقريبن سڀني ڪيسن ۾، آخري عملن کي بنيادي ڊيٽا جي ذريعن ذريعي انهن جي منتقلي کي مڪمل ڪرڻ جي ڪوشش ڪئي وئي آهي. سلسلي جي هڪ ٻي قيمتي خصوصيت باڪس کان ٻاهر متوازي عملن جي حمايت آهي. اچو ته هن مثال کي ڏسو، جيڪو سڀني مسئلن جي سکور جو مجموعو ڳولي ٿو. IntegerTask::getPointsTasksumstreamfilterforEachsum
// Calculate total points of all tasks
final double totalPoints = tasks
   .stream()
   .parallel()
   .map( task -> task.getPoints() ) // or map( Task::getPoints )
   .reduce( 0, Integer::sum );

System.out.println( "Total points (all tasks): " + totalPoints );
هي بلڪل پهرين مثال سان ملندڙ جلندڙ آهي، سواءِ ان جي ته اسان ڪوشش ڪري رهيا آهيون ته سڀني ڪمن کي متوازي طريقي سان عمل ۾ آڻيون ۽ طريقي سان استعمال ڪندي آخري نتيجو ڳڻيو reduce. هتي آهي ڪنسول جي پيداوار:
Total points (all tasks): 26.0
گهڻو ڪري اتي هڪ خاص معيار جي مطابق گروپ عناصر جي ضرورت آهي. مثال ڏيکاري ٿو ته ڪئين موضوع هن سان مدد ڪري سگھن ٿا.
// Группировка задач по их статусу
final Map<Status, List<Task>> map = tasks
    .stream()
    .collect( Collectors.groupingBy( Task::getStatus ) );
System.out.println( map );
ڪنسول جي پيداوار هن ريت هوندي:
{CLOSED=[[CLOSED, 8]], OPEN=[[OPEN, 5], [OPEN, 13]]}
مسئلي جي مثالن سان ختم ڪرڻ لاءِ، اچو ته مجموعي ۾ ھر مسئلي جي مجموعي فيصد (يا وزن) کي مجموعي نقطن جي بنياد تي شمار ڪريون:
// Подсчет веса каждой задачи (How процент от общего количества очков)
final Collection<String> result = tasks
    .stream()                                        // Stream<String>
    .mapToInt( Task::getPoints )                     // IntStream
    .asLongStream()                                  // LongStream
    .mapToDouble( points -> points / totalPoints )   // DoubleStream
    .boxed()                                         // Stream<Double>
    .mapToLong( weigth -> ( long )( weigth * 100 ) ) // LongStream
    .mapToObj( percentage -> percentage + "%" )      // Stream<String>
    .collect( Collectors.toList() );                 // List<String>

System.out.println( result );
ڪنسول جي پيداوار هن طرح ٿيندي:
[19%, 50%, 30%]
آخرڪار، جيئن اسان اڳ ۾ نوٽ ڪيو، اسٽريم API صرف جاوا گڏ ڪرڻ لاء ناهي. ھڪڙو عام I/O آپريشن، جيئن پڙھڻ ٽيڪسٽ فائلون لائن ذريعي، ھڪڙو سٺو اميدوار آھي اسٽريم پروسيسنگ استعمال ڪرڻ لاءِ. ان ڳالهه کي ثابت ڪرڻ لاءِ هتي هڪ ننڍڙو مثال آهي.
final Path path = new File( filename ).toPath();
try( Stream<String> lines = Files.lines( path, StandardCharsets.UTF_8 ) ) {
    lines.onClose( () -> System.out.println("Done!") ).forEach( System.out::println );
}
طريقو onConsole، جنهن کي ٿريڊ تي سڏيو ويندو آهي، هڪ اضافي پرائيويٽ هينڊلر سان هڪ جيتري ڌاڳو موٽائي ٿو. پرائيويٽ سنڀاليندڙ کي سڏيو ويندو آهي جڏهن هڪ طريقو close()هڪ سلسلي تي سڏيو ويندو آهي. اسٽريم API سان گڏ لامبڊاس ۽ ريفرنس طريقن سان گڏ جاوا 8 ۾ ڊفالٽ ۽ جامد طريقن سان جديد سافٽ ويئر ڊولپمينٽ پيراڊمز جو جواب آهي. وڌيڪ تفصيلي معلومات لاء، مهرباني ڪري ڏسو سرڪاري دستاويز .

5.3. تاريخ/وقت API (JSR 310)

جاوا 8 نئين تاريخ ۽ وقت جي انتظام کي نئين تاريخ ۽ وقت API (JSR 310) مهيا ڪندي هڪ نئين شڪل آڻيندو آهي . تاريخ ۽ وقت جي ڦيرڦار جاوا ڊولپرز لاء بدترين درد واري پوائنٽن مان هڪ آهي. java.util.Dateهيٺ ڏنل معيار java.util.Calendarعام طور تي صورتحال کي بهتر نه ڪيو (شايد ان کي وڌيڪ مونجهارو ڪيو). اهڙيءَ طرح جوڊا ٽائم پيدا ٿيو : جاوا لاءِ هڪ بهترين تاريخ/وقت API متبادل . جاوا 8 (JSR 310) ۾ نئين تاريخ/وقت API جوڊا ٽائم کان تمام گهڻو متاثر ٿيو آهي ۽ ان مان بهترين فائدو وٺندو آهي. نئين پيڪيج ۾ تاريخ، وقت، تاريخ/وقت، ٽائيم زون، مدو، ۽ وقت جي ڦيرڦار لاءِ سڀئي ڪلاسjava.time شامل آهن . API ڊيزائن کي تمام سنجيدگي سان تبديل ڪيو ويو: تبديلين جي اجازت ناهي (هڪ سخت سبق مان سکيو ويو ). جيڪڏهن ترميم جي ضرورت آهي، ساڳئي طبقي جو هڪ نئون مثال واپس ڪيو ويندو. اچو ته مکيه طبقن ۽ انهن جي استعمال جا مثال ڏسو. فرسٽ ڪلاس ، جيڪو ٽائيم زون استعمال ڪندي موجوده فوري، تاريخ ۽ وقت تائين رسائي فراهم ڪري ٿو. جي بدران استعمال ڪري سگھجي ٿو ۽ . java.util.CalendarClockClockSystem.currentTimeMillis()TimeZone.getDefault()
// Получить системное время How смещение UTC
final Clock clock = Clock.systemUTC();
System.out.println( clock.instant() );
System.out.println( clock.millis() );
مثال ڪنسول آئوٽ پٽ:
2014-04-12T15:19:29.282Z
1397315969360
ٻيا نوان ڪلاس اسان ڏسندا سين LocaleDate۽ LocalTime. LocaleDateISO-8601 ڪئلينڊر سسٽم ۾ ٽائم زون کان سواءِ صرف تاريخ جو حصو شامل آهي. ان جي مطابق، LocalTimeاهو صرف ٽائيم ڪوڊ جو حصو آهي>.
// получить местную date и время время
final LocalDate date = LocalDate.now();
final LocalDate dateFromClock = LocalDate.now( clock );

System.out.println( date );
System.out.println( dateFromClock );

// получить местную date и время время
final LocalTime time = LocalTime.now();
final LocalTime timeFromClock = LocalTime.now( clock );

System.out.println( time );
System.out.println( timeFromClock );
مثال ڪنسول آئوٽ پٽ:
2014-04-12
2014-04-12
11:25:54.568
15:25:54.568
LocalDateTimeISO-8601 ڪئلينڊر سسٽم ۾، هڪ تاريخ ۽ وقت تي مشتمل آهي، پر ڪو ٽائم زون ناهي LocaleDate. LocalTimeهڪ سادي مثال هيٺ ڏنل آهي.
// Get the local date/time
final LocalDateTime datetime = LocalDateTime.now();
final LocalDateTime datetimeFromClock = LocalDateTime.now( clock );

System.out.println( datetime );
System.out.println( datetimeFromClock );
مثال ڪنسول آئوٽ پٽ:
2014-04-12T11:37:52.309
2014-04-12T15:37:52.309
جيڪڏھن توھان کي ضرورت آھي تاريخ/وقت جي مخصوص ٽائم زون لاءِ، ZonedDateTime. اهو ISO-8601 ڪئلينڊر سسٽم ۾ تاريخ ۽ وقت تي مشتمل آهي. هتي مختلف وقت جي علائقن لاءِ ڪجهه مثال آهن.
// Получение даты/времени для временной зоны
final ZonedDateTime zonedDatetime = ZonedDateTime.now();
final ZonedDateTime zonedDatetimeFromClock = ZonedDateTime.now( clock );
final ZonedDateTime zonedDatetimeFromZone = ZonedDateTime.now( ZoneId.of( "America/Los_Angeles" ) );

System.out.println( zonedDatetime );
System.out.println( zonedDatetimeFromClock );
System.out.println( zonedDatetimeFromZone );
مثال ڪنسول آئوٽ پٽ:
2014-04-12T11:47:01.017-04:00[America/New_York]
2014-04-12T15:47:01.017Z
2014-04-12T08:47:01.017-07:00[America/Los_Angeles]
۽ آخرڪار، اچو ته ڪلاس تي هڪ نظر رکون Duration: سيڪنڊن ۽ نانو سيڪنڊن ۾ وقت. هي ٻن تاريخن جي وچ ۾ حساب ڪتاب تمام سادو بڻائي ٿو. اچو ته ڏسو ته اهو ڪيئن ڪجي:
// Получаем разницу между двумя датами
final LocalDateTime from = LocalDateTime.of( 2014, Month.APRIL, 16, 0, 0, 0 );
final LocalDateTime to = LocalDateTime.of( 2015, Month.APRIL, 16, 23, 59, 59 );

final Duration duration = Duration.between( from, to );
System.out.println( "Duration in days: " + duration.toDays() );
System.out.println( "Duration in hours: " + duration.toHours() );
مٿي ڏنل مثال ٻن تاريخن، اپريل 16، 2014 ۽ اپريل 16، 2015 جي وچ ۾ مدت (ڏينهن ۽ ڪلاڪن ۾) حساب ڪري ٿو . هتي ڪنسول آئوٽ جو هڪ مثال آهي:
Duration in days: 365
Duration in hours: 8783
جاوا 8 ۾ نئين تاريخ / وقت جو مجموعي تاثر تمام، تمام مثبت آهي. جزوي طور تي ڇاڪاڻ ته تبديليون جنگ جي آزمائشي بنيادن تي ٻڌل آهن (جوڊا ٽائم)، جزوي طور تي ڇاڪاڻ ته هن ڀيري مسئلي تي سنجيدگي سان غور ڪيو ويو ۽ ڊولپرز جي آوازن کي ٻڌو ويو. تفصيل لاءِ، مھرباني ڪري ڏسو سرڪاري دستاويز .

5.4. Nashorn JavaScript انجڻ

Java 8 نئين Nashorn JavaScript انجڻ سان گڏ اچي ٿو ، جيڪو توهان کي JVM تي خاص قسم جا JavaScript ايپليڪيشنون ٺاهڻ ۽ هلائڻ جي اجازت ڏئي ٿو. Nashorn JavaScript انجڻ صرف javax.script.ScriptEngine جو هڪ ٻيو عمل آهي جيڪو جاوا ۽ جاوا اسڪرپٽ کي رابطي جي اجازت ڏيڻ لاءِ ساڳين قاعدن جي پيروي ڪري ٿو. هتي هڪ ننڍڙو مثال آهي.
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName( "JavaScript" );

System.out.println( engine.getClass().getName() );
System.out.println( "Result:" + engine.eval( "function f() { return 1; }; f() + 1;" ) );
مثال ڪنسول آئوٽ پٽ:
jdk.nashorn.api.scripting.NashornScriptEngine
Result: 2

5.5. بنياد 64

آخرڪار، Base64 انڪوڊنگ لاءِ سپورٽ جاوا 8 جي رليز سان جاوا معياري لائبريري ۾ ان جو رستو مليو. اهو استعمال ڪرڻ بلڪل آسان آهي، مثال هن کي ڏيکاري ٿو.
package com.javacodegeeks.java8.base64;

import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class Base64s {
    public static void main(String[] args) {
        final String text = "Base64 finally in Java 8!";

        final String encoded = Base64
            .getEncoder()
            .encodeToString( text.getBytes( StandardCharsets.UTF_8 ) );
        System.out.println( encoded );

        final String decoded = new String(
            Base64.getDecoder().decode( encoded ),
            StandardCharsets.UTF_8 );
        System.out.println( decoded );
    }
}
پروگرام جو ڪنسول آئوٽ ٻنهي انڪوڊ ٿيل ۽ ڊيڪوڊ ٿيل ٽيڪسٽ ڏيکاري ٿو:
QmFzZTY0IGZpbmFsbHkgaW4gSmF2YSA4IQ==
Base64 finally in Java 8!
هتي URL-دوست انڪوڊرز/ڊيڪوڊرز لاءِ پڻ ڪلاس آهن، انهي سان گڏ MIME-دوستانه انڪوڊرز/ڊيڪوڊرز ( Base64.getUrlEncoder()/ Base64.getUrlDecoder(), Base64.getMimeEncoder()/ Base64.getMimeDecoder()) لاءِ.

5.6. متوازي صفون

جاوا 8 رليز متوازي صف پروسيسنگ لاءِ ڪيترائي نوان طريقا شامل ڪري ٿو. شايد انھن مان سڀ کان وڌيڪ اھم آھي parallelSort()، جيڪو گھڻ-ڪور مشينن تي ترتيب ڏيڻ کي تمام تيز ڪري سگھي ٿو. هيٺ ڏنل ننڍڙو مثال طريقن جي نئين خاندان کي ( parallelXxx) عمل ۾ ڏيکاري ٿو.
package com.javacodegeeks.java8.parallel.arrays;

import java.util.Arrays;
import java.util.concurrent.ThreadLocalRandom;

public class ParallelArrays {
    public static void main( String[] args ) {
        long[] arrayOfLong = new long [ 20000 ];

        Arrays.parallelSetAll( arrayOfLong,
            index -> ThreadLocalRandom.current().nextInt( 1000000 ) );
        Arrays.stream( arrayOfLong ).limit( 10 ).forEach(
            i -> System.out.print( i + " " ) );
        System.out.println();

        Arrays.parallelSort( arrayOfLong );
        Arrays.stream( arrayOfLong ).limit( 10 ).forEach(
            i -> System.out.print( i + " " ) );
        System.out.println();
    }
}
ڪوڊ جو هي ننڍڙو ٽڪرو parallelSetAll()20,000 بي ترتيب قدرن سان هڪ صف ڀرڻ لاءِ هڪ طريقو استعمال ڪري ٿو. ان کان پوء ان کي لاڳو ڪيو ويندو آهي parallelSort(). پروگرام ترتيب ڏيڻ کان اڳ ۽ بعد ۾ پهرين 10 عناصر کي پرنٽ ڪري ٿو ته اهو ڏيکاري ٿو ته صف اصل ۾ ترتيب ڏنل آهي. ھڪڙو مثال پروگرام جي پيداوار ھن طرح نظر اچي سگھي ٿي (نوٽ ڪريو ته صف جا عنصر بي ترتيب آھن).
Unsorted: 591217 891976 443951 424479 766825 351964 242997 642839 119108 552378
Sorted: 39 220 263 268 325 607 655 678 723 793

5.7. متوازيت

ڪلاس ۾ نوان طريقا شامل ڪيا ويا آھن java.util.concurrent.ConcurrentHashMapمجموعي عملن کي سپورٽ ڪرڻ لاءِ نون شامل ٿيل اسٽريم آبجڪس ۽ ليمبڊا ايڪسپريس جي بنياد تي. گڏوگڏ نوان طريقا شامل ڪيا ويا آھن ڪلاس ۾ java.util.concurrent.ForkJoinPoolحصيداري ڪيل پولنگ کي سپورٽ ڪرڻ لاءِ (پڻ ڏسو اسان جو مفت ڪورس جاوا اتفاق راءِ تي ). قابليت تي ٻڌل لاڪنگ مهيا ڪرڻ لاءِ هڪ نئون ڪلاس java.util.concurrent.locks.StampedLockشامل ڪيو ويو آهي ٽن رسائي طريقن سان پڙهڻ/لکڻ جي ڪنٽرول لاءِ (اهو سمجهي سگهجي ٿو بهتر متبادل نه ته ايترو سٺو نه java.util.concurrent.locks.ReadWriteLock). نوان ڪلاس جيڪي پيڪيج ۾ شامل ڪيا ويا آهن java.util.concurrent.atomic:
  • ڊبل جمع ڪندڙ
  • DoubleAdder
  • ڊگهو جمع ڪندڙ
  • لانگ ايڊر

6. جاوا رن ٽائم ماحول ۾ نيون خاصيتون (JVM)

علائقي PermGenکي رٽائر ڪيو ويو آهي ۽ ميٽاسپيس (JEP 122) طرفان تبديل ڪيو ويو آهي. JVM آپشنز -XX:PermSize۽ ترتيب سان تبديل ڪيا -XX:MaxPermSizeويا آھن . -XX:MetaSpaceSize-XX:MaxMetaspaceSize

7. نتيجو

مستقبل هتي آهي: جاوا 8 پنهنجي پليٽ فارم کي اڳتي وڌايو آهي خاصيتون پهچائڻ سان جيڪي ڊولپرز کي وڌيڪ پيداوار ڏيڻ جي اجازت ڏين ٿيون. پروڊڪشن سسٽم کي جاوا 8 ڏانهن منتقل ڪرڻ لاءِ اڃا تمام جلدي آهي، پر اپنائڻ کي ايندڙ ڪجهه مهينن ۾ آهستي آهستي وڌڻ شروع ڪيو وڃي. بهرحال، هاڻي وقت آهي توهان جي ڪوڊ بيس تيار ڪرڻ شروع ڪريو جاوا 8 مطابقت لاءِ ۽ جاوا 8 تبديلين کي شامل ڪرڻ لاءِ تيار ٿي وڃو جڏهن اهو محفوظ ۽ مستحڪم آهي. ڪميونٽي جي جاوا 8 جي قبوليت جي وصيت جي طور تي، Pivotal تازو جاري ڪيو اسپرنگ فريم ورڪ جاوا 8 لاءِ پيداوار جي مدد سان . توهان تبصرن ۾ جاوا 8 ۾ دلچسپ نون فيچرز بابت پنهنجو ان پٽ مهيا ڪري سگهو ٿا.

8. ذريعا

ڪجھ اضافي وسيلا جيڪي جاوا 8 خاصيتن جي مختلف پهلوئن تي بحث ڪن ٿا.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION