For example, certain native functions (such as file storage) must be maintained on a per-application basis. In a single-tasking system, only one application is running, and so all file access is on behalf of that one application. In a multitasking system, several applications are running, and so the file access code can no longer assume that just one application exists. Instead, it must be aware of the possibility of multiple applications, so that one application doesn't accidentally operate on another application’s files. Code that is aware of this possibility is multitask safe.

While operations from different tasks can occur in an arbitrary order, no possibility exists of actual concurrency among native methods. One native thread exists in the Java Wireless Client software. When it is running a native method, no possibility exists of a context switch that causes another native method to be run at the same time. Each native method runs to completion and returns before the next native method can begin. For this reason, every native method is a critical section, and it is usually not necessary to perform any OS-level locking (such as with Pthreads mutexes) in native methods. It is only necessary to use OS-level locking if other native threads are active in the system while the Java Wireless Client software is running.

Thus, while native code that runs within Java Wireless Client software must be multitask safe, it need not be multithread safe.

Global and Static Data

In a single-tasking system, it is common for native code to use global or static variables. This works because only one application is running at a time. Global data is implicitly associated with the currently running application. In a multi-tasking system, the multiple applications likely conflict over global data. Therefore, to make your code multitask safe, you might need to rearrange your native data to be allocated on a per-task basis instead of globally.

To do this, you must allocate native data dynamically instead of statically. In addition, you need to associate each piece of native data with a particular task.

To manage native data on a per-task basis, store a pointer to the native data into an int field in a Java object. Associating the native resource with a single Java object implicitly provides multitasking safety because each Java object resides in exactly one task. It is also a good object-oriented approach.

Create a class to represent the native resource. Give the class a private field to hold the pointer to the resource, for example:

private int nativePtr;

Chapter 2 Multitasking Safety 7

Page 19
Image 19
Sun Microsystems 2 manual Global and Static Data

2 specifications

Sun Microsystems, founded in 1982, was a significant player in the computing industry, best known for its innovative technology solutions and workstations, particularly the Sun-4, which represented a key milestone in the company's history. The Sun-4 architecture, launched in 1987, utilized the SPARC (Scalable Processor Architecture) RISC processor, notable for its high performance and scalability.

One of the primary features of Sun Microsystems' platforms was their ability to efficiently handle multitasking and resource management, making them ideal for enterprise-level applications and development environments. Sun-4 workstations boasted impressive graphics capabilities with the addition of advanced graphical user interfaces, support for color displays, and the SUNVIEW windowing system, which enhanced user experience and productivity.

The Sun-4 systems also supported the SunOS operating system, which was based on UNIX. This operating system was engineered for stability and robustness, offering features like multiuser support, networked environments, and advanced security options. Moreover, SunOS provided seamless integration with various programming languages, including C and C++, facilitating software development that aligned with industry standards.

Another standout characteristic of Sun Microsystems was its commitment to open systems and standards. By providing developers with comprehensive tools and environments, such as the Standardized Application Programming Interface (API) and support for networking protocols, Sun facilitated interoperability among different computing platforms. The emphasis on open architecture also meant that customers could easily upgrade their systems without being locked into proprietary solutions.

Sun Microsystems was also ahead of its time with innovations in network computing. Their workstations were among the first to support network file systems and distributed computing concepts, enabling seamless data sharing across multiple systems. With the introduction of the Network File System (NFS), Sun revolutionized how data was accessed and managed across networks, which played a significant role in the evolving landscape of client-server computing.

In summary, the Sun Microsystems 2 and its successive innovations in workstation technology highlighted the company's forward-thinking approach. By integrating powerful performance with open systems, robust operating systems, and advanced networking capabilities, Sun laid the groundwork for modern computing, influencing various sectors from academia to enterprise solutions. Even after its acquisition by Oracle in 2010, the legacy of Sun Microsystems continues to be felt across the computing industry.