Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: SynchronousQueue-luokassa NullPointerException

fergusq [28.04.2019 20:24:30]

#

Eräs Java-ohjelmani antaa harvoin (harvemmin kuin kerran kymmenessä tuhannessa ajokerrassa) tällaisen virheen:

Exception in thread "pool-1-thread-2" java.lang.NullPointerException
	at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:461)
	at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
	at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941)
	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

Virhe tulee ohjelmasta, joka on iso ja monimutkainen ja jossa käynnistetään paljon säikeitä. En oikein tiedä mistä edes aloittaa ongelman tutkiminen, kun en tiedä, mistä kohtaa koodia vika ilmenee.

Virhe tulee siis todella harvoin, joten en ole saanut sitä syntymään koskaan, kun olen ajanut ohjelmaa debug-tilassa. Sen sijaan tuotannossa, jossa ohjelmaa ajetaan minuutin välein, virhe syntyy aina muutaman viikon sisällä.

Olen yrittänyt etsiä netistä tällä virheellä, mutta en ole löytänyt mitään. Osaako kukaan auttaa?

Muokkaus: korjattu metodin nimi

Metabolix [28.04.2019 21:36:28]

#

Mikä Javan (JRE:n) versio on kyseessä? Ihanko oikeasti virheessä lukee awaitFullfill eikä awaitFulfill kuten kaikissa hakukoneella löytyvissä lähteissä (ja OpenJDK:n lähdekoodissa)? Myös rivinumero osuu nykyisessä koodissa riville, jossa ei nähdäkseni käsitellä mitään oliota (paitsi this), joten herää epäilys, että käyttämäsi Java-versio on jollain tavalla poikkeava.

Grez [28.04.2019 23:10:15]

#

Ei välttämättä nyt auta tähän, mutta olen itse huomannut monisäikeississä projekteissa, että ongelmien selvittelyssä on paljon apua, kun nimeää säikeet järkevästi. Siis olettaisin, että tuo pool-1-thread-2 on Javan oletus eikä sinällään auta asiaa.

Itse olen siis koodaillut pääasiassa C#:ssa, mutta katsoin että Javasssakin voi nimetä säikeet.

fergusq [29.04.2019 01:43:45]

#

Metabolix kirjoitti:

(28.04.2019 21:36:28): Mikä Javan (JRE:n) versio on kyseessä? Ihanko...

Metodin nimessä oli kirjoitusvirhe... Kopioin virheen käsin tähän, koska en pääse Ohjelmointiputkaan koneelta, jolla ohjelmaa ajetaan. Valitettavasti virhettä ei enää ole koska käynnistin ohjelman uudestaan ja nyt pitää odottaa että se taas ilmenee.

Javan build-versio on 1.8.0_111-8u111-b14-3-b14.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta