{"id":20884815,"url":"https://github.com/morgwai/java-utils","last_synced_at":"2026-02-24T01:11:35.239Z","repository":{"id":51607037,"uuid":"360290356","full_name":"morgwai/java-utils","owner":"morgwai","description":"Some utility classes","archived":false,"fork":false,"pushed_at":"2025-04-21T21:18:41.000Z","size":706,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-07-15T02:08:12.347Z","etag":null,"topics":["concurrent","java","java-util","java-util-concurrent"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/morgwai.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-04-21T19:56:41.000Z","updated_at":"2025-04-14T00:50:45.000Z","dependencies_parsed_at":"2024-02-11T03:19:48.804Z","dependency_job_id":"f088dcb6-0b9b-4a5c-a26e-83156ba8800b","html_url":"https://github.com/morgwai/java-utils","commit_stats":null,"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"purl":"pkg:github/morgwai/java-utils","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/morgwai%2Fjava-utils","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/morgwai%2Fjava-utils/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/morgwai%2Fjava-utils/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/morgwai%2Fjava-utils/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/morgwai","download_url":"https://codeload.github.com/morgwai/java-utils/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/morgwai%2Fjava-utils/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29765745,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-23T21:02:23.375Z","status":"ssl_error","status_checked_at":"2026-02-23T20:58:31.539Z","response_time":90,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["concurrent","java","java-util","java-util-concurrent"],"created_at":"2024-11-18T08:11:39.981Z","updated_at":"2026-02-24T01:11:35.213Z","avatar_url":"https://github.com/morgwai.png","language":"Java","readme":"# Java utils\n\nSome utility classes.\u003cbr/\u003e\nCopyright 2021 Piotr Morgwai Kotarbinski, Licensed under the Apache License, Version 2.0.\u003cbr/\u003e\n\u003cbr/\u003e\n**latest release: [5.2](https://search.maven.org/artifact/pl.morgwai.base/java-utils/5.2/jar)**\n([javadoc](https://javadoc.io/doc/pl.morgwai.base/java-utils/5.2))\n\nSee [CHANGES](CHANGES.md) for the summary of changes between releases. If the major version of a subsequent release remains unchanged, it is supposed to be backwards compatible in terms of API and behaviour with previous ones with the same major version (meaning that it should be safe to just blindly update in dependent projects and things should not break under normal circumstances).\n\n**Note:** from version 2.0, `java.util.logging` utilities have been moved to a separate [repo](https://github.com/morgwai/jul-utils).\n\n## MAIN USER CLASSES\n\n### [OrderedConcurrentOutputBuffer](https://javadoc.io/doc/pl.morgwai.base/java-utils/latest/pl/morgwai/base/utils/concurrent/OrderedConcurrentOutputBuffer.html)\nBuffers messages until all of those that should be written before to the underlying output stream are available, so that they all can be written in the desired order. Useful for processing input streams in several concurrent Threads when the order of the resulting outbound messages must reflect the order of inbound messages. See a usage example [here](https://github.com/morgwai/grpc-utils/blob/v6.0/src/main/java/pl/morgwai/base/grpc/utils/OrderedConcurrentInboundObserver.java).\n\n### [CallableTaskExecution](https://javadoc.io/doc/pl.morgwai.base/java-utils/latest/pl/morgwai/base/utils/concurrent/CallableTaskExecution.html)\nAdapter for a `Callable` that allows to pass it to `Executor.execute(Runnable)` and access its results using [CompletableFuture](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/CompletableFuture.html) API.\n\n### [TaskTrackingExecutor](https://javadoc.io/doc/pl.morgwai.base/java-utils/latest/pl/morgwai/base/utils/concurrent/TaskTrackingExecutor.html)\n`ExecutorService` that allows to obtain a List of currently running tasks. Useful for monitoring or debugging which tasks got stuck and prevented clean termination. 2 implementations are provided: [TaskTrackingThreadPoolExecutor](src/main/java/pl/morgwai/base/utils/concurrent/TaskTrackingThreadPoolExecutor.java) extending `ThreadPoolExecutor` and [ScheduledTaskTrackingThreadPoolExecutor](src/main/java/pl/morgwai/base/utils/concurrent/ScheduledTaskTrackingThreadPoolExecutor.java) extending `ScheduledThreadPoolExecutor`.\n\n### [Awaitable](https://javadoc.io/doc/pl.morgwai.base/java-utils/latest/pl/morgwai/base/utils/concurrent/Awaitable.html)\nUtilities to await for multiple timed blocking operations, such as `Thread.join(timeout)`, `ExecutorService.awaitTermination(...)` etc. See a usage example [here](https://github.com/morgwai/grpc-utils/blob/v6.0/sample/src/main/java/pl/morgwai/samples/grpc/utils/SqueezedServer.java#L488-L497).\n\n### [NamingThreadFactory](https://javadoc.io/doc/pl.morgwai.base/java-utils/latest/pl/morgwai/base/utils/concurrent/NamingThreadFactory.html)\n`ThreadFactory` that names new `Thread`s based on a constructor supplied generator/name.\n\n### [NoCopyByteArrayOutputStream](https://javadoc.io/doc/pl.morgwai.base/java-utils/latest/pl/morgwai/base/utils/io/NoCopyByteArrayOutputStream.html)\n`ByteArrayOutputStream` that allows to directly access its underlying buffer (without copying) after the stream was closed.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmorgwai%2Fjava-utils","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmorgwai%2Fjava-utils","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmorgwai%2Fjava-utils/lists"}