Indeed. Python and Java have very different runtime designs and use of data structures. For example, there is no list or dict “builtin” (java.lang.*) in Java: collection classes like java.util.ArrayList and HashMap are plain old Java classes. Since they are not special, providing separate, concurrent versions is not a problem. Whereas in Python the collection classes are ubiquitous to the language and are literally builtin to the interpreter itself. Module globals is a dict, object __dict__ is a dict, the same pervasiveness goes for lists and tuples. In making Python concurrent we may already have to make some of these builtins concurrent as well, therefore changing our needs. On the other hand, there are Python-specific constructs (perhaps, those related to caching?) the need to provide concurrent versions of those may arise in the future.
Though it is quite early to tell what concurrency models and constructs we will need in the future, I do agree that the concepts and experience of (shared-execution-context, i.e. multithreading, subinterpreters) concurrency in Python are relatively underdeveloped at the moment. As free-threading has now become a reality, what is needed IMO is a survey of usage of to identify Python-specific needs and see how they align with our proposed functionality. And doing so takes time and community experience — despite the Python language itself being notionally compatible with multithreading, CPython’s GIL had effectively suppressed the development and adoption of multithreading paradigms in the ecosystem over the years; other forms of concurrency such as asyncio and multiprocessing only work around the limitations. It will take some time for the community to fully embrace shared-execution-context concurrency and outline the possibilities that they enable.