The lock() and unlock() static methods were added to the Microwave class to protect the context that was being built implicitly in library static data by the setTime() and setPower() methods. This locking protocol effectively provides mutual exclusion around library static data. This works in a single-tasking environment, but it fails in a multitasking environment, as described earlier.

If the setup methods simply set values into Java variables, and these values are set into the library immediately before the call to mw_cook(), a locking protocol that makes the setup calls and the cook call atomic is no longer necessary. This technique doesn't work in a multitasking environment anyway. Therefore, it must be removed. The setup context logically belongs to the calling thread. Multiple threads could lock, wait, and notify over static data, but this too is no longer necessary if each thread is permitted to operate on its own instance of a Microwave object.

After making these changes, the resulting Java code is shown in CODE EXAMPLE 2-8.

CODE EXAMPLE 2-8Keeping State in Java Code

public class Microwave {

int nsecs; int power;

private int nativePtr;

public void setTime(int nsecs) {

//error checking elided for brevity this.nsecs = nsecs;

}

public void setPower(int power) {

//error checking elided for brevity this.power = power;

}

public int cook() { init();

return n_cook();

}

private native void init(); private native void n_cook();

public Microwave() { } /* allow instance creation */ private native void finalize();

}

The responsibility of the n_cook() native method is now much greater. It must block the calling thread until any other cooking operation has completed. It must retrieve the field values from the object and set them into the library. Finally, it must block until this cooking operation has completed. Note that to avoid race conditions, all of this must be performed by a single native method.

16 Multitasking Guide • May 2007

Page 28
Image 28
Sun Microsystems manual Code Example 2-8Keeping State in Java 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.