CODE EXAMPLE 2-6Migrating the Initialization Variable to Native Code (Doesn’t Work)

// Microwave.java

static native boolean getInitState();

static native void setInitState(boolean init);

public static synchronized void lock() throws InterruptedException {

...

if (!getInitState()) {

init();

setInitState(true);

}

}

Unfortunately, the code in CODE EXAMPLE 2-6does not work. The reason is that threads from different tasks can be switched at any time. Suppose that a thread in task A calls getInitState(), which returns false. The thread decides that the microwave library needs to be initialized, and it starts to execute the code in the if block. Now suppose the system switches to run a thread in task B that is also about to run this code. Task B’s thread also calls getInitState(), which also returns false, and so this thread also decides to execute the code in the if block. This results in two calls to the native mw_init() function, which is an error.

From the Java programming language point of view, the tasks are completely isolated from each other, and therefore threads from different tasks cannot interact. This means that there is no Java programming language construct that can provide mutual exclusion between threads that are in different tasks. Therefore, some other kind of mechanism at the native method level is necessary, because native methods operate outside the constraints of the Java programming language.

Instead of the flag test and set logic being in Java code, it must also be migrated to native code, along with the flag itself. In this case, the Java code can call init() every time and it can rely on the logic in native code to ensure that the mw_init() function is called only once, as shown in CODE EXAMPLE 2-7.

CODE EXAMPLE 2-7Migrating Initialization to Native Code

/* microwave.c */

static int initialized = 0;

KNIEXPORT KNI_RETURNTYPE_VOID

Java_javax_microwave_oven_Microwave_init(void)

14 Multitasking Guide • May 2007

Page 26
Image 26
Sun Microsystems manual Code Example 2-7Migrating Initialization to Native Code

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.